import gleam/dynamic/decode.{type Decoder} import spacetraders_models/reactor_symbol.{type ReactorSymbol} import spacetraders_models/ship_component_condition.{type ShipComponentCondition} import spacetraders_models/ship_component_integrity.{type ShipComponentIntegrity} import spacetraders_models/ship_component_quality.{type ShipComponentQuality} import spacetraders_models/ship_requirements.{type ShipRequirements} pub type ShipReactor { ShipReactor( symbol: ReactorSymbol, name: String, condition: ShipComponentCondition, integrity: ShipComponentIntegrity, description: String, power_output: Int, requirements: ShipRequirements, quality: ShipComponentQuality, ) } pub fn decoder() -> Decoder(ShipReactor) { use symbol <- decode.field("symbol", reactor_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 power_output <- decode.field("powerOutput", decode.int) use requirements <- decode.field("requirements", ship_requirements.decoder()) use quality <- decode.field("quality", ship_component_quality.decoder()) decode.success(ShipReactor( symbol:, name:, condition:, integrity:, description:, power_output:, requirements:, quality:, )) }