41 lines
1.2 KiB
Gleam
41 lines
1.2 KiB
Gleam
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:,
|
|
))
|
|
}
|