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:, )) }