gleam-spacetraders-sdk/src/models/market.gleam
Lily Rose 64f3729d0c
Some checks are pending
test / test (push) Waiting to run
Refactoring and general tidying up
2025-06-17 19:04:29 +10:00

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:,
))
}