61 lines
2 KiB
Gleam
61 lines
2 KiB
Gleam
import gleam/dynamic/decode.{type Decoder}
|
|
import gleam/option.{type Option}
|
|
import spacetraders_models/activity_level.{type ActivityLevel}
|
|
import spacetraders_models/ship_engine.{type ShipEngine}
|
|
import spacetraders_models/ship_frame.{type ShipFrame}
|
|
import spacetraders_models/ship_module.{type ShipModule}
|
|
import spacetraders_models/ship_mount.{type ShipMount}
|
|
import spacetraders_models/ship_reactor.{type ShipReactor}
|
|
import spacetraders_models/ship_type.{type ShipType}
|
|
import spacetraders_models/shipyard_ship_crew.{type ShipyardShipCrew}
|
|
import spacetraders_models/supply_level.{type SupplyLevel}
|
|
|
|
pub type ShipyardShip {
|
|
ShipyardShip(
|
|
type_: ShipType,
|
|
name: String,
|
|
description: String,
|
|
activity: Option(ActivityLevel),
|
|
supply: SupplyLevel,
|
|
purchase_price: Int,
|
|
frame: ShipFrame,
|
|
reactor: ShipReactor,
|
|
engine: ShipEngine,
|
|
modules: List(ShipModule),
|
|
mounts: List(ShipMount),
|
|
crew: ShipyardShipCrew,
|
|
)
|
|
}
|
|
|
|
pub fn decoder() -> Decoder(ShipyardShip) {
|
|
use type_ <- decode.field("type", ship_type.decoder())
|
|
use name <- decode.field("name", decode.string)
|
|
use description <- decode.field("description", decode.string)
|
|
use activity <- decode.optional_field(
|
|
"activity",
|
|
option.None,
|
|
decode.optional(activity_level.decoder()),
|
|
)
|
|
use supply <- decode.field("supply", supply_level.decoder())
|
|
use purchase_price <- decode.field("purchasePrice", decode.int)
|
|
use frame <- decode.field("frame", ship_frame.decoder())
|
|
use reactor <- decode.field("reactor", ship_reactor.decoder())
|
|
use engine <- decode.field("engine", ship_engine.decoder())
|
|
use modules <- decode.field("modules", decode.list(ship_module.decoder()))
|
|
use mounts <- decode.field("mounts", decode.list(ship_mount.decoder()))
|
|
use crew <- decode.field("crew", shipyard_ship_crew.decoder())
|
|
decode.success(ShipyardShip(
|
|
type_:,
|
|
name:,
|
|
description:,
|
|
activity:,
|
|
supply:,
|
|
purchase_price:,
|
|
frame:,
|
|
reactor:,
|
|
engine:,
|
|
modules:,
|
|
mounts:,
|
|
crew:,
|
|
))
|
|
}
|