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:)) }