import gleam/dynamic/decode.{type Decoder} import utils/decode as decode_utils pub type WaypointTraitSymbol { Uncharted UnderConstruction Marketplace Shipyard Outpost ScatteredSettlements SprawlingCities MegaStructures PirateBase Overcrowded HighTech Corrupt Bureaucratic TradingHub Industrial BlackMarket ResearchFacility MilitaryBase SurveillanceOutpost ExplorationOutpost MineralDeposits CommonMetalDeposits PreciousMetalDeposits RareMetalDeposits MethanePools IceCrystals ExplosiveGases StrongMagnetosphere VibrantAuroras SaltFlats Canyons PerpetualDaylight PerpetualOvercast DrySeabeds MagmaSeas Supervolcanoes AshClouds VastRuins MutatedFlora Terraformed ExtremeTemperatures ExtremePressure DiverseLife ScarceLife Fossils WeakGravity StrongGravity CrushingGravity ToxicAtmosphere CorrosiveAtmosphere BreathableAtmosphere ThinAtmosphere Jovian Rocky Volcanic Frozen Swamp Barren Temperate Jungle Ocean Radioactive MicroGravityAnomalies DebrisCluster DeepCraters ShallowCraters UnstableComposition HollowedInterior Stripped } pub fn to_string(waypoint_trait_symbol: WaypointTraitSymbol) -> String { case waypoint_trait_symbol { Uncharted -> "UNCHARTED" UnderConstruction -> "UNDER_CONSTRUCTION" Marketplace -> "MARKETPLACE" Shipyard -> "SHIPYARD" Outpost -> "OUTPOST" ScatteredSettlements -> "SCATTERED_SETTLEMENTS" SprawlingCities -> "SPRAWLING_CITIES" MegaStructures -> "MEGA_STRUCTURES" PirateBase -> "PIRATE_BASE" Overcrowded -> "OVERCROWDED" HighTech -> "HIGH_TECH" Corrupt -> "CORRUPT" Bureaucratic -> "BUREAUCRATIC" TradingHub -> "TRADING_HUB" Industrial -> "INDUSTRIAL" BlackMarket -> "BLACK_MARKET" ResearchFacility -> "RESEARCH_FACILITY" MilitaryBase -> "MILITARY_BASE" SurveillanceOutpost -> "SURVEILLANCE_OUTPOST" ExplorationOutpost -> "EXPLORATION_OUTPOST" MineralDeposits -> "MINERAL_DEPOSITS" CommonMetalDeposits -> "COMMON_METAL_DEPOSITS" PreciousMetalDeposits -> "PRECIOUS_METAL_DEPOSITS" RareMetalDeposits -> "RARE_METAL_DEPOSITS" MethanePools -> "METHANE_POOLS" IceCrystals -> "ICE_CRYSTALS" ExplosiveGases -> "EXPLOSIVE_GASES" StrongMagnetosphere -> "STRONG_MAGNETOSPHERE" VibrantAuroras -> "VIBRANT_AURORAS" SaltFlats -> "SALT_FLATS" Canyons -> "CANYONS" PerpetualDaylight -> "PERPETUAL_DAYLIGHT" PerpetualOvercast -> "PERPETUAL_OVERCAST" DrySeabeds -> "DRY_SEABEDS" MagmaSeas -> "MAGMA_SEAS" Supervolcanoes -> "SUPERVOLCANOES" AshClouds -> "ASH_CLOUDS" VastRuins -> "VAST_RUINS" MutatedFlora -> "MUTATED_FLORA" Terraformed -> "TERRAFORMED" ExtremeTemperatures -> "EXTREME_TEMPERATURES" ExtremePressure -> "EXTREME_PRESSURE" DiverseLife -> "DIVERSE_LIFE" ScarceLife -> "SCARCE_LIFE" Fossils -> "FOSSILS" WeakGravity -> "WEAK_GRAVITY" StrongGravity -> "STRONG_GRAVITY" CrushingGravity -> "CRUSHING_GRAVITY" ToxicAtmosphere -> "TOXIC_ATMOSPHERE" CorrosiveAtmosphere -> "CORROSIVE_ATMOSPHERE" BreathableAtmosphere -> "BREATHABLE_ATMOSPHERE" ThinAtmosphere -> "THIN_ATMOSPHERE" Jovian -> "JOVIAN" Rocky -> "ROCKY" Volcanic -> "VOLCANIC" Frozen -> "FROZEN" Swamp -> "SWAMP" Barren -> "BARREN" Temperate -> "TEMPERATE" Jungle -> "JUNGLE" Ocean -> "OCEAN" Radioactive -> "RADIOACTIVE" MicroGravityAnomalies -> "MICRO_GRAVITY_ANOMALIES" DebrisCluster -> "DEBRIS_CLUSTER" DeepCraters -> "DEEP_CRATERS" ShallowCraters -> "SHALLOW_CRATERS" UnstableComposition -> "UNSTABLE_COMPOSITION" HollowedInterior -> "HOLLOWED_INTERIOR" Stripped -> "STRIPPED" } } pub fn parse( waypoint_trait_symbol_str: String, ) -> Result(WaypointTraitSymbol, WaypointTraitSymbol) { case waypoint_trait_symbol_str { "UNCHARTED" -> Ok(Uncharted) "UNDER_CONSTRUCTION" -> Ok(UnderConstruction) "MARKETPLACE" -> Ok(Marketplace) "SHIPYARD" -> Ok(Shipyard) "OUTPOST" -> Ok(Outpost) "SCATTERED_SETTLEMENTS" -> Ok(ScatteredSettlements) "SPRAWLING_CITIES" -> Ok(SprawlingCities) "MEGA_STRUCTURES" -> Ok(MegaStructures) "PIRATE_BASE" -> Ok(PirateBase) "OVERCROWDED" -> Ok(Overcrowded) "HIGH_TECH" -> Ok(HighTech) "CORRUPT" -> Ok(Corrupt) "BUREAUCRATIC" -> Ok(Bureaucratic) "TRADING_HUB" -> Ok(TradingHub) "INDUSTRIAL" -> Ok(Industrial) "BLACK_MARKET" -> Ok(BlackMarket) "RESEARCH_FACILITY" -> Ok(ResearchFacility) "MILITARY_BASE" -> Ok(MilitaryBase) "SURVEILLANCE_OUTPOST" -> Ok(SurveillanceOutpost) "EXPLORATION_OUTPOST" -> Ok(ExplorationOutpost) "MINERAL_DEPOSITS" -> Ok(MineralDeposits) "COMMON_METAL_DEPOSITS" -> Ok(CommonMetalDeposits) "PRECIOUS_METAL_DEPOSITS" -> Ok(PreciousMetalDeposits) "RARE_METAL_DEPOSITS" -> Ok(RareMetalDeposits) "METHANE_POOLS" -> Ok(MethanePools) "ICE_CRYSTALS" -> Ok(IceCrystals) "EXPLOSIVE_GASES" -> Ok(ExplosiveGases) "STRONG_MAGNETOSPHERE" -> Ok(StrongMagnetosphere) "VIBRANT_AURORAS" -> Ok(VibrantAuroras) "SALT_FLATS" -> Ok(SaltFlats) "CANYONS" -> Ok(Canyons) "PERPETUAL_DAYLIGHT" -> Ok(PerpetualDaylight) "PERPETUAL_OVERCAST" -> Ok(PerpetualOvercast) "DRY_SEABEDS" -> Ok(DrySeabeds) "MAGMA_SEAS" -> Ok(MagmaSeas) "SUPERVOLCANOES" -> Ok(Supervolcanoes) "ASH_CLOUDS" -> Ok(AshClouds) "VAST_RUINS" -> Ok(VastRuins) "MUTATED_FLORA" -> Ok(MutatedFlora) "TERRAFORMED" -> Ok(Terraformed) "EXTREME_TEMPERATURES" -> Ok(ExtremeTemperatures) "EXTREME_PRESSURE" -> Ok(ExtremePressure) "DIVERSE_LIFE" -> Ok(DiverseLife) "SCARCE_LIFE" -> Ok(ScarceLife) "FOSSILS" -> Ok(Fossils) "WEAK_GRAVITY" -> Ok(WeakGravity) "STRONG_GRAVITY" -> Ok(StrongGravity) "CRUSHING_GRAVITY" -> Ok(CrushingGravity) "TOXIC_ATMOSPHERE" -> Ok(ToxicAtmosphere) "CORROSIVE_ATMOSPHERE" -> Ok(CorrosiveAtmosphere) "BREATHABLE_ATMOSPHERE" -> Ok(BreathableAtmosphere) "THIN_ATMOSPHERE" -> Ok(ThinAtmosphere) "JOVIAN" -> Ok(Jovian) "ROCKY" -> Ok(Rocky) "VOLCANIC" -> Ok(Volcanic) "FROZEN" -> Ok(Frozen) "SWAMP" -> Ok(Swamp) "BARREN" -> Ok(Barren) "TEMPERATE" -> Ok(Temperate) "JUNGLE" -> Ok(Jungle) "OCEAN" -> Ok(Ocean) "RADIOACTIVE" -> Ok(Radioactive) "MICRO_GRAVITY_ANOMALIES" -> Ok(MicroGravityAnomalies) "DEBRIS_CLUSTER" -> Ok(DebrisCluster) "DEEP_CRATERS" -> Ok(DeepCraters) "SHALLOW_CRATERS" -> Ok(ShallowCraters) "UNSTABLE_COMPOSITION" -> Ok(UnstableComposition) "HOLLOWED_INTERIOR" -> Ok(HollowedInterior) "STRIPPED" -> Ok(Stripped) _ -> Error(Uncharted) } } pub fn decoder() -> Decoder(WaypointTraitSymbol) { decode_utils.enum_decoder(parse, "WaypointTraitSymbol") }