gleam-spacetraders-models/src/spacetraders_models/ship_module.gleam
Lily Rose fab4c9df5d
Some checks are pending
test / test (push) Waiting to run
Initial commit
2025-07-08 23:03:42 +10:00

40 lines
1 KiB
Gleam

import gleam/dynamic/decode.{type Decoder}
import gleam/option.{type Option}
import spacetraders_models/module_symbol.{type ModuleSymbol}
import spacetraders_models/ship_requirements.{type ShipRequirements}
pub type ShipModule {
ShipModule(
symbol: ModuleSymbol,
name: String,
description: String,
capacity: Option(Int),
range: Option(Int),
requirements: ShipRequirements,
)
}
pub fn decoder() -> Decoder(ShipModule) {
use symbol <- decode.field("symbol", module_symbol.decoder())
use name <- decode.field("name", decode.string)
use description <- decode.field("description", decode.string)
use capacity <- decode.optional_field(
"capacity",
option.None,
decode.optional(decode.int),
)
use range <- decode.optional_field(
"range",
option.None,
decode.optional(decode.int),
)
use requirements <- decode.field("requirements", ship_requirements.decoder())
decode.success(ShipModule(
symbol:,
name:,
description:,
capacity:,
range:,
requirements:,
))
}