25 lines
608 B
Gleam
25 lines
608 B
Gleam
import gleam/dynamic/decode.{type Decoder}
|
|
import gleam/option.{type Option}
|
|
|
|
pub type ShipRequirements {
|
|
ShipRequirements(power: Option(Int), crew: Option(Int), slots: Option(Int))
|
|
}
|
|
|
|
pub fn decoder() -> Decoder(ShipRequirements) {
|
|
use power <- decode.optional_field(
|
|
"power",
|
|
option.None,
|
|
decode.optional(decode.int),
|
|
)
|
|
use crew <- decode.optional_field(
|
|
"crew",
|
|
option.None,
|
|
decode.optional(decode.int),
|
|
)
|
|
use slots <- decode.optional_field(
|
|
"slots",
|
|
option.None,
|
|
decode.optional(decode.int),
|
|
)
|
|
decode.success(ShipRequirements(power:, crew:, slots:))
|
|
}
|