import gleam/dynamic/decode.{type Decoder} import gleam/option.{type Option} import models/activity_level.{type ActivityLevel} import models/supply_level.{type SupplyLevel} import models/trade_good_type.{type TradeGoodType} import models/trade_symbol.{type TradeSymbol} pub type MarketTradeGood { MarketTradeGood( symbol: TradeSymbol, type_: TradeGoodType, trade_volume: Int, supply: SupplyLevel, activity: Option(ActivityLevel), purchase_price: Int, sell_price: Int, ) } pub fn decoder() -> Decoder(MarketTradeGood) { use symbol <- decode.field("symbol", trade_symbol.decoder()) use type_ <- decode.field("type", trade_good_type.decoder()) use trade_volume <- decode.field("tradeVolume", decode.int) use supply <- decode.field("supply", supply_level.decoder()) use activity <- decode.optional_field( "activity", option.None, decode.optional(activity_level.decoder()), ) use purchase_price <- decode.field("purchasePrice", decode.int) use sell_price <- decode.field("sellPrice", decode.int) decode.success(MarketTradeGood( symbol:, type_:, trade_volume:, supply:, activity:, purchase_price:, sell_price:, )) }