import gleam/dynamic/decode.{type Decoder} import spacetraders_models/trade_symbol.{type TradeSymbol} import spacetraders_models/waypoint_symbol.{type WaypointSymbol} pub type ContractDeliverGood { ContractDeliverGood( trade_symbol: TradeSymbol, destination_symbol: WaypointSymbol, units_required: Int, units_fulfilled: Int, ) } pub fn decoder() -> Decoder(ContractDeliverGood) { use trade_symbol <- decode.field("tradeSymbol", trade_symbol.decoder()) use destination_symbol <- decode.field( "destinationSymbol", waypoint_symbol.decoder(), ) use units_required <- decode.field("unitsRequired", decode.int) use units_fulfilled <- decode.field("unitsFulfilled", decode.int) decode.success(ContractDeliverGood( trade_symbol:, destination_symbol:, units_required:, units_fulfilled:, )) }