25 lines
820 B
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:))
|
|
}
|