gleam-spacetraders-sdk/src/spacetraders_sdk/models/contract.gleam

43 lines
1.3 KiB
Gleam

import birl.{type Time}
import gleam/dynamic/decode.{type Decoder}
import gleam/option.{type Option}
import spacetraders_sdk/models/contract_id.{type ContractId}
import spacetraders_sdk/models/contract_terms.{type ContractTerms}
import spacetraders_sdk/models/contract_type.{type ContractType}
import spacetraders_sdk/models/faction_symbol.{type FactionSymbol}
import spacetraders_sdk/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:,
))
}