gleam-spacetraders-models/src/spacetraders_models/contract_terms.gleam
Lily Rose fab4c9df5d
Some checks are pending
test / test (push) Waiting to run
Initial commit
2025-07-08 23:03:42 +10:00

25 lines
858 B
Gleam

import gleam/dynamic/decode.{type Decoder}
import gleam/option.{type Option}
import gleam/time/timestamp.{type Timestamp}
import spacetraders_models/contract_deliver_good.{type ContractDeliverGood}
import spacetraders_models/contract_payment.{type ContractPayment}
import spacetraders_models/internal/time
pub type ContractTerms {
ContractTerms(
deadline: Timestamp,
payment: ContractPayment,
deliver: Option(List(ContractDeliverGood)),
)
}
pub fn decoder() -> Decoder(ContractTerms) {
use deadline <- decode.field("deadline", time.rfc3339_timestamp_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:))
}