40 lines
1.4 KiB
Gleam
40 lines
1.4 KiB
Gleam
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:,
|
|
))
|
|
}
|