gleam-spacetraders-sdk/src/models/scanned_waypoint.gleam
Lily Rose cc8edbed02
Some checks are pending
test / test (push) Waiting to run
Add functioning sdk
2025-06-17 01:43:06 +10:00

57 lines
1.6 KiB
Gleam

import gleam/dynamic/decode.{type Decoder}
import gleam/option.{type Option}
import models/chart.{type Chart}
import models/system_symbol.{type SystemSymbol}
import models/waypoint_faction.{type WaypointFaction}
import models/waypoint_orbital.{type WaypointOrbital}
import models/waypoint_symbol.{type WaypointSymbol}
import models/waypoint_trait.{type WaypointTrait}
import models/waypoint_type.{type WaypointType}
pub type ScannedWaypoint {
ScannedWaypoint(
symbol: WaypointSymbol,
type_: WaypointType,
system_symbol: SystemSymbol,
x: Int,
y: Int,
orbitals: List(WaypointOrbital),
faction: Option(WaypointFaction),
traits: List(WaypointTrait),
chart: Option(Chart),
)
}
pub fn decoder() -> Decoder(ScannedWaypoint) {
use symbol <- decode.field("symbol", waypoint_symbol.decoder())
use type_ <- decode.field("type", waypoint_type.decoder())
use system_symbol <- decode.field("systemSymbol", system_symbol.decoder())
use x <- decode.field("x", decode.int)
use y <- decode.field("y", decode.int)
use orbitals <- decode.field(
"orbitals",
decode.list(waypoint_orbital.decoder()),
)
use faction <- decode.optional_field(
"faction",
option.None,
decode.optional(waypoint_faction.decoder()),
)
use traits <- decode.field("traits", decode.list(waypoint_trait.decoder()))
use chart <- decode.optional_field(
"chart",
option.None,
decode.optional(chart.decoder()),
)
decode.success(ScannedWaypoint(
symbol:,
type_:,
system_symbol:,
x:,
y:,
orbitals:,
faction:,
traits:,
chart:,
))
}