41 lines
1.1 KiB
Gleam
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:,
|
|
))
|
|
}
|