gleam-spacetraders-sdk/src/models/ship_mount.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

41 lines
1.1 KiB
Gleam

import gleam/dynamic/decode.{type Decoder}
import gleam/option.{type Option}
import models/mount_deposit.{type MountDeposit}
import models/mount_symbol.{type MountSymbol}
import models/ship_requirements.{type ShipRequirements}
pub type ShipMount {
ShipMount(
symbol: MountSymbol,
name: String,
description: String,
strength: Option(Int),
deposits: Option(List(MountDeposit)),
requirements: ShipRequirements,
)
}
pub fn decoder() -> Decoder(ShipMount) {
use symbol <- decode.field("symbol", mount_symbol.decoder())
use name <- decode.field("name", decode.string)
use description <- decode.field("description", decode.string)
use strength <- decode.optional_field(
"strength",
option.None,
decode.optional(decode.int),
)
use deposits <- decode.optional_field(
"deposits",
option.None,
decode.optional(decode.list(mount_deposit.decoder())),
)
use requirements <- decode.field("requirements", ship_requirements.decoder())
decode.success(ShipMount(
symbol:,
name:,
description:,
strength:,
deposits:,
requirements:,
))
}