gleam-spacetraders-sdk/src/spacetraders_models/faction_symbol.gleam

85 lines
1.7 KiB
Gleam

import gleam/dynamic/decode.{type Decoder}
import gleam/json.{type Json}
pub type FactionSymbol {
Cosmic
Void
Galactic
Quantum
Dominion
Astro
Corsairs
Obsidian
Aegis
United
Solitary
Cobalt
Omega
Echo
Lord
Cult
Ancients
Shadow
Ethereal
}
pub fn parse(value: String) -> Result(FactionSymbol, Nil) {
case value {
"COSMIC" -> Ok(Cosmic)
"VOID" -> Ok(Void)
"GALACTIC" -> Ok(Galactic)
"QUANTUM" -> Ok(Quantum)
"DOMINION" -> Ok(Dominion)
"ASTRO" -> Ok(Astro)
"CORSAIRS" -> Ok(Corsairs)
"OBSIDIAN" -> Ok(Obsidian)
"AEGIS" -> Ok(Aegis)
"UNITED" -> Ok(United)
"SOLITARY" -> Ok(Solitary)
"COBALT" -> Ok(Cobalt)
"OMEGA" -> Ok(Omega)
"ECHO" -> Ok(Echo)
"LORDS" -> Ok(Lord)
"CULT" -> Ok(Cult)
"ANCIENTS" -> Ok(Ancients)
"SHADOW" -> Ok(Shadow)
"ETHEREAL" -> Ok(Ethereal)
_ -> Error(Nil)
}
}
pub fn decoder() -> Decoder(FactionSymbol) {
use value <- decode.then(decode.string)
case parse(value) {
Ok(faction_symbol) -> decode.success(faction_symbol)
Error(Nil) -> decode.failure(Cosmic, "FactionSymbol")
}
}
pub fn to_string(faction_symbol: FactionSymbol) -> String {
case faction_symbol {
Cosmic -> "COSMIC"
Void -> "VOID"
Galactic -> "GALACTIC"
Quantum -> "QUANTUM"
Dominion -> "DOMINION"
Astro -> "ASTRO"
Corsairs -> "CORSAIRS"
Obsidian -> "OBSIDIAN"
Aegis -> "AEGIS"
United -> "UNITED"
Solitary -> "SOLITARY"
Cobalt -> "COBALT"
Omega -> "OMEGA"
Echo -> "ECHO"
Lord -> "LORDS"
Cult -> "CULT"
Ancients -> "ANCIENTS"
Shadow -> "SHADOW"
Ethereal -> "ETHEREAL"
}
}
pub fn encode(faction_symbol: FactionSymbol) -> Json {
json.string(to_string(faction_symbol))
}