gleam-spacetraders-sdk/src/models/ship_module.gleam
Lily Rose 64f3729d0c
Some checks are pending
test / test (push) Waiting to run
Refactoring and general tidying up
2025-06-17 19:04:29 +10:00

40 lines
1,021 B
Gleam

import gleam/dynamic/decode.{type Decoder}
import gleam/option.{type Option}
import models/module_symbol.{type ModuleSymbol}
import 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:,
))
}