gleam-spacetraders-sdk/src/models/contract.gleam
Lily Rose 64f3729d0c
Some checks are pending
test / test (push) Waiting to run
Refactoring and general tidying up
2025-06-17 19:04:29 +10:00

43 lines
1.2 KiB
Gleam

import birl.{type Time}
import gleam/dynamic/decode.{type Decoder}
import gleam/option.{type Option}
import models/contract_id.{type ContractId}
import models/contract_terms.{type ContractTerms}
import models/contract_type.{type ContractType}
import models/faction_symbol.{type FactionSymbol}
import utils/api
pub type Contract {
Contract(
id: ContractId,
faction_symbol: FactionSymbol,
type_: ContractType,
terms: ContractTerms,
accepted: Bool,
fulfilled: Bool,
deadline_to_accept: Option(Time),
)
}
pub fn decoder() -> Decoder(Contract) {
use id <- decode.field("id", contract_id.decoder())
use faction_symbol <- decode.field("factionSymbol", faction_symbol.decoder())
use type_ <- decode.field("type", contract_type.decoder())
use terms <- decode.field("terms", contract_terms.decoder())
use accepted <- decode.field("accepted", decode.bool)
use fulfilled <- decode.field("fulfilled", decode.bool)
use deadline_to_accept <- decode.optional_field(
"deadlineToAccept",
option.None,
decode.optional(api.time_decoder()),
)
decode.success(Contract(
id:,
faction_symbol:,
type_:,
terms:,
accepted:,
fulfilled:,
deadline_to_accept:,
))
}