gleam-spacetraders-sdk/src/spacetraders_models/ship_module.gleam

41 lines
1 KiB
Gleam
Raw Permalink Normal View History

2025-06-16 11:43:06 -04:00
import gleam/dynamic/decode.{type Decoder}
import gleam/option.{type Option}
2025-06-18 05:44:38 -04:00
import spacetraders_models/module_symbol.{type ModuleSymbol}
import spacetraders_models/ship_requirements.{type ShipRequirements}
2025-06-16 11:43:06 -04:00
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)
2025-06-17 05:04:29 -04:00
use capacity <- decode.optional_field(
"capacity",
option.None,
decode.optional(decode.int),
)
use range <- decode.optional_field(
"range",
option.None,
decode.optional(decode.int),
)
2025-06-16 11:43:06 -04:00
use requirements <- decode.field("requirements", ship_requirements.decoder())
decode.success(ShipModule(
symbol:,
name:,
description:,
capacity:,
range:,
requirements:,
))
}