43 lines
1.3 KiB
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:,
|
|
))
|
|
}
|