42 lines
1.3 KiB
Gleam
42 lines
1.3 KiB
Gleam
import gleam/dynamic/decode.{type Decoder}
|
|
import gleam/option.{type Option}
|
|
import models/market_symbol.{type MarketSymbol}
|
|
import models/market_trade_good.{type MarketTradeGood}
|
|
import models/market_transaction.{type MarketTransaction}
|
|
import models/trade_good.{type TradeGood}
|
|
|
|
pub type Market {
|
|
Market(
|
|
symbol: MarketSymbol,
|
|
exports: List(TradeGood),
|
|
imports: List(TradeGood),
|
|
exchange: List(TradeGood),
|
|
transactions: Option(List(MarketTransaction)),
|
|
trade_goods: Option(List(MarketTradeGood)),
|
|
)
|
|
}
|
|
|
|
pub fn decoder() -> Decoder(Market) {
|
|
use symbol <- decode.field("symbol", market_symbol.decoder())
|
|
use exports <- decode.field("exports", decode.list(trade_good.decoder()))
|
|
use imports <- decode.field("imports", decode.list(trade_good.decoder()))
|
|
use exchange <- decode.field("exchange", decode.list(trade_good.decoder()))
|
|
use transactions <- decode.optional_field(
|
|
"transactions",
|
|
option.None,
|
|
decode.optional(decode.list(market_transaction.decoder())),
|
|
)
|
|
use trade_goods <- decode.optional_field(
|
|
"tradeGoods",
|
|
option.None,
|
|
decode.optional(decode.list(market_trade_good.decoder())),
|
|
)
|
|
decode.success(Market(
|
|
symbol:,
|
|
exports:,
|
|
imports:,
|
|
exchange:,
|
|
transactions:,
|
|
trade_goods:,
|
|
))
|
|
}
|