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