39 lines
1.1 KiB
Gleam
39 lines
1.1 KiB
Gleam
import gleam/dynamic/decode.{type Decoder}
|
|
import gleam/option.{type Option}
|
|
import models/ship_type.{type ShipType}
|
|
import models/shipyard_ship.{type ShipyardShip}
|
|
import models/shipyard_symbol.{type ShipyardSymbol}
|
|
import models/shipyard_transaction.{type ShipyardTransaction}
|
|
|
|
pub type Shipyard {
|
|
Shipyard(
|
|
symbol: ShipyardSymbol,
|
|
ship_types: List(ShipType),
|
|
transactions: Option(List(ShipyardTransaction)),
|
|
ships: Option(List(ShipyardShip)),
|
|
modifications_fee: Int,
|
|
)
|
|
}
|
|
|
|
pub fn decoder() -> Decoder(Shipyard) {
|
|
use symbol <- decode.field("symbol", shipyard_symbol.decoder())
|
|
use ship_types <- decode.field("shipTypes", decode.list(ship_type.decoder()))
|
|
use transactions <- decode.optional_field(
|
|
"transactions",
|
|
option.None,
|
|
decode.optional(decode.list(shipyard_transaction.decoder())),
|
|
)
|
|
use ships <- decode.optional_field(
|
|
"ships",
|
|
option.None,
|
|
decode.optional(decode.list(shipyard_ship.decoder())),
|
|
)
|
|
use modifications_fee <- decode.field("modificationsFee", decode.int)
|
|
decode.success(Shipyard(
|
|
symbol:,
|
|
ship_types:,
|
|
transactions:,
|
|
ships:,
|
|
modifications_fee:,
|
|
))
|
|
}
|