46 lines
1.6 KiB
Gleam
46 lines
1.6 KiB
Gleam
import gleam/dynamic/decode.{type Decoder}
|
|
import models/frame_symbol.{type FrameSymbol}
|
|
import models/ship_component_condition.{type ShipComponentCondition}
|
|
import models/ship_component_integrity.{type ShipComponentIntegrity}
|
|
import models/ship_component_quality.{type ShipComponentQuality}
|
|
import models/ship_requirements.{type ShipRequirements}
|
|
|
|
pub type ShipFrame {
|
|
ShipFrame(
|
|
symbol: FrameSymbol,
|
|
name: String,
|
|
condition: ShipComponentCondition,
|
|
integrity: ShipComponentIntegrity,
|
|
description: String,
|
|
module_slots: Int,
|
|
mounting_points: Int,
|
|
fuel_capacity: Int,
|
|
requirements: ShipRequirements,
|
|
quality: ShipComponentQuality,
|
|
)
|
|
}
|
|
|
|
pub fn decoder() -> Decoder(ShipFrame) {
|
|
use symbol <- decode.field("symbol", frame_symbol.decoder())
|
|
use name <- decode.field("name", decode.string)
|
|
use condition <- decode.field("condition", ship_component_condition.decoder())
|
|
use integrity <- decode.field("integrity", ship_component_integrity.decoder())
|
|
use description <- decode.field("description", decode.string)
|
|
use module_slots <- decode.field("moduleSlots", decode.int)
|
|
use mounting_points <- decode.field("mountingPoints", decode.int)
|
|
use fuel_capacity <- decode.field("fuelCapacity", decode.int)
|
|
use requirements <- decode.field("requirements", ship_requirements.decoder())
|
|
use quality <- decode.field("quality", ship_component_quality.decoder())
|
|
decode.success(ShipFrame(
|
|
symbol:,
|
|
name:,
|
|
condition:,
|
|
integrity:,
|
|
description:,
|
|
module_slots:,
|
|
mounting_points:,
|
|
fuel_capacity:,
|
|
requirements:,
|
|
quality:,
|
|
))
|
|
}
|