gleam-spacetraders-sdk/src/spacetraders_models/contract_terms.gleam

25 lines
820 B
Gleam

import birl.{type Time}
import gleam/dynamic/decode.{type Decoder}
import gleam/option.{type Option}
import spacetraders_models/contract_deliver_good.{type ContractDeliverGood}
import spacetraders_models/contract_payment.{type ContractPayment}
import spacetraders_sdk/internal/time
pub type ContractTerms {
ContractTerms(
deadline: Time,
payment: ContractPayment,
deliver: Option(List(ContractDeliverGood)),
)
}
pub fn decoder() -> Decoder(ContractTerms) {
use deadline <- decode.field("deadline", time.datetime_decoder())
use payment <- decode.field("payment", contract_payment.decoder())
use deliver <- decode.optional_field(
"deliver",
option.None,
decode.optional(decode.list(contract_deliver_good.decoder())),
)
decode.success(ContractTerms(deadline:, payment:, deliver:))
}