59 lines
2 KiB
Gleam
59 lines
2 KiB
Gleam
import gleam/dynamic/decode.{type Decoder}
|
|
import spacetraders_models/cooldown.{type Cooldown}
|
|
import spacetraders_models/ship_cargo.{type ShipCargo}
|
|
import spacetraders_models/ship_crew.{type ShipCrew}
|
|
import spacetraders_models/ship_engine.{type ShipEngine}
|
|
import spacetraders_models/ship_frame.{type ShipFrame}
|
|
import spacetraders_models/ship_fuel.{type ShipFuel}
|
|
import spacetraders_models/ship_module.{type ShipModule}
|
|
import spacetraders_models/ship_mount.{type ShipMount}
|
|
import spacetraders_models/ship_nav.{type ShipNav}
|
|
import spacetraders_models/ship_reactor.{type ShipReactor}
|
|
import spacetraders_models/ship_registration.{type ShipRegistration}
|
|
import spacetraders_models/ship_symbol.{type ShipSymbol}
|
|
|
|
pub type Ship {
|
|
Ship(
|
|
symbol: ShipSymbol,
|
|
registration: ShipRegistration,
|
|
nav: ShipNav,
|
|
crew: ShipCrew,
|
|
frame: ShipFrame,
|
|
reactor: ShipReactor,
|
|
engine: ShipEngine,
|
|
modules: List(ShipModule),
|
|
mounts: List(ShipMount),
|
|
cargo: ShipCargo,
|
|
cooldown: Cooldown,
|
|
fuel: ShipFuel,
|
|
)
|
|
}
|
|
|
|
pub fn decoder() -> Decoder(Ship) {
|
|
use symbol <- decode.field("symbol", ship_symbol.decoder())
|
|
use registration <- decode.field("registration", ship_registration.decoder())
|
|
use nav <- decode.field("nav", ship_nav.decoder())
|
|
use crew <- decode.field("crew", ship_crew.decoder())
|
|
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 cargo <- decode.field("cargo", ship_cargo.decoder())
|
|
use cooldown <- decode.field("cooldown", cooldown.decoder())
|
|
use fuel <- decode.field("fuel", ship_fuel.decoder())
|
|
decode.success(Ship(
|
|
symbol:,
|
|
registration:,
|
|
nav:,
|
|
crew:,
|
|
frame:,
|
|
reactor:,
|
|
engine:,
|
|
modules:,
|
|
mounts:,
|
|
cargo:,
|
|
cooldown:,
|
|
fuel:,
|
|
))
|
|
}
|