85 lines
1.7 KiB
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))
|
|
}
|