gleam-spacetraders-sdk/src/spacetraders_sdk/models/cooldown.gleam

31 lines
830 B
Gleam

import birl.{type Time}
import gleam/dynamic/decode.{type Decoder}
import gleam/option.{type Option}
import spacetraders_sdk/models/ship_symbol.{type ShipSymbol}
import spacetraders_sdk/utils/api
pub type Cooldown {
Cooldown(
ship_symbol: ShipSymbol,
total_seconds: Int,
remaining_seconds: Int,
expiration: Option(Time),
)
}
pub fn decoder() -> Decoder(Cooldown) {
use ship_symbol <- decode.field("shipSymbol", ship_symbol.decoder())
use total_seconds <- decode.field("totalSeconds", decode.int)
use remaining_seconds <- decode.field("remainingSeconds", decode.int)
use expiration <- decode.optional_field(
"expiration",
option.None,
decode.optional(api.time_decoder()),
)
decode.success(Cooldown(
ship_symbol:,
total_seconds:,
remaining_seconds:,
expiration:,
))
}