import birl.{type Time} import gleam/dynamic/decode.{type Decoder} import gleam/option.{type Option} import spacetraders_sdk/models/contract_deliver_good.{type ContractDeliverGood} import spacetraders_sdk/models/contract_payment.{type ContractPayment} import spacetraders_sdk/utils/api pub type ContractTerms { ContractTerms( deadline: Time, payment: ContractPayment, deliver: Option(List(ContractDeliverGood)), ) } pub fn decoder() -> Decoder(ContractTerms) { use deadline <- decode.field("deadline", api.time_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:)) }