31 lines
830 B
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:,
|
|
))
|
|
}
|