gleam-spacetraders-sdk/src/spacetraders_models/ship.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:,
))
}