import gleam/dynamic/decode.{type Decoder} import utils/decode as decode_utils pub type FactionSymbol { Cosmic Void Galactic Quantum Dominion Astro Corsairs Obsidian Aegis United Solitary Cobalt Omega Echo Lord Cult Ancients Shadow Ethereal } pub fn to_string(symbol: FactionSymbol) -> String { case 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 parse(symbol_str: String) -> Result(FactionSymbol, FactionSymbol) { case symbol_str { "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(Cosmic) } } pub fn decoder() -> Decoder(FactionSymbol) { decode_utils.enum_decoder(parse, "FactionSymbol") }