gleam-spacetraders-sdk/src/models/faction_trait_symbol.gleam
Lily Rose 64f3729d0c
Some checks are pending
test / test (push) Waiting to run
Refactoring and general tidying up
2025-06-17 19:04:29 +10:00

205 lines
5.2 KiB
Gleam

import gleam/dynamic/decode.{type Decoder}
import gleam/json.{type Json}
pub type FactionTraitSymbol {
Bureaucratic
Secretive
Capitalistic
Industrious
Peaceful
Distrustful
Welcoming
Smugglers
Scavengers
Rebellious
Exiles
Pirates
Raiders
Clan
Guild
Dominion
Fringe
Forsaken
Isolated
Localized
Established
Notable
Dominant
Inescapable
Innovative
Bold
Visionary
Curious
Daring
Exploratory
Resourceful
Flexible
Cooperative
United
Strategic
Intelligent
ResearchFocused
Collaborative
Progressive
Militaristic
TechnologicallyAdvanced
Aggressive
Imperialistic
TreasureHunters
Dexterous
Unpredictable
Brutal
Fleeting
Adaptable
SelfSufficient
Defensive
Proud
Diverse
Independent
SelfInterested
Fragmented
Commercial
FreeMarkets
Entrepreneurial
}
pub fn parse(value: String) -> Result(FactionTraitSymbol, Nil) {
case value {
"BUREAUCRATIC" -> Ok(Bureaucratic)
"SECRETIVE" -> Ok(Secretive)
"CAPITALISTIC" -> Ok(Capitalistic)
"INDUSTRIOUS" -> Ok(Industrious)
"PEACEFUL" -> Ok(Peaceful)
"DISTRUSTFUL" -> Ok(Distrustful)
"WELCOMING" -> Ok(Welcoming)
"SMUGGLERS" -> Ok(Smugglers)
"SCAVENGERS" -> Ok(Scavengers)
"REBELLIOUS" -> Ok(Rebellious)
"EXILES" -> Ok(Exiles)
"PIRATES" -> Ok(Pirates)
"RAIDERS" -> Ok(Raiders)
"CLAN" -> Ok(Clan)
"GUILD" -> Ok(Guild)
"DOMINION" -> Ok(Dominion)
"FRINGE" -> Ok(Fringe)
"FORSAKEN" -> Ok(Forsaken)
"ISOLATED" -> Ok(Isolated)
"LOCALIZED" -> Ok(Localized)
"ESTABLISHED" -> Ok(Established)
"NOTABLE" -> Ok(Notable)
"DOMINANT" -> Ok(Dominant)
"INESCAPABLE" -> Ok(Inescapable)
"INNOVATIVE" -> Ok(Innovative)
"BOLD" -> Ok(Bold)
"VISIONARY" -> Ok(Visionary)
"CURIOUS" -> Ok(Curious)
"DARING" -> Ok(Daring)
"EXPLORATORY" -> Ok(Exploratory)
"RESOURCEFUL" -> Ok(Resourceful)
"FLEXIBLE" -> Ok(Flexible)
"COOPERATIVE" -> Ok(Cooperative)
"UNITED" -> Ok(United)
"STRATEGIC" -> Ok(Strategic)
"INTELLIGENT" -> Ok(Intelligent)
"RESEARCH_FOCUSED" -> Ok(ResearchFocused)
"COLLABORATIVE" -> Ok(Collaborative)
"PROGRESSIVE" -> Ok(Progressive)
"MILITARISTIC" -> Ok(Militaristic)
"TECHNOLOGICALLY_ADVANCED" -> Ok(TechnologicallyAdvanced)
"AGGRESSIVE" -> Ok(Aggressive)
"IMPERIALISTIC" -> Ok(Imperialistic)
"TREASURE_HUNTERS" -> Ok(TreasureHunters)
"DEXTEROUS" -> Ok(Dexterous)
"UNPREDICTABLE" -> Ok(Unpredictable)
"BRUTAL" -> Ok(Brutal)
"FLEETING" -> Ok(Fleeting)
"ADAPTABLE" -> Ok(Adaptable)
"SELF_SUFFICIENT" -> Ok(SelfSufficient)
"DEFENSIVE" -> Ok(Defensive)
"PROUD" -> Ok(Proud)
"DIVERSE" -> Ok(Diverse)
"INDEPENDENT" -> Ok(Independent)
"SELF_INTERESTED" -> Ok(SelfInterested)
"FRAGMENTED" -> Ok(Fragmented)
"COMMERCIAL" -> Ok(Commercial)
"FREE_MARKETS" -> Ok(FreeMarkets)
"ENTREPRENEURIAL" -> Ok(Entrepreneurial)
_ -> Error(Nil)
}
}
pub fn decoder() -> Decoder(FactionTraitSymbol) {
use value <- decode.then(decode.string)
case parse(value) {
Ok(faction_trait_symbol) -> decode.success(faction_trait_symbol)
Error(Nil) -> decode.failure(Bureaucratic, "FactionTraitSymbol")
}
}
pub fn to_string(faction_trait_symbol: FactionTraitSymbol) -> String {
case faction_trait_symbol {
Bureaucratic -> "BUREAUCRATIC"
Secretive -> "SECRETIVE"
Capitalistic -> "CAPITALISTIC"
Industrious -> "INDUSTRIOUS"
Peaceful -> "PEACEFUL"
Distrustful -> "DISTRUSTFUL"
Welcoming -> "WELCOMING"
Smugglers -> "SMUGGLERS"
Scavengers -> "SCAVENGERS"
Rebellious -> "REBELLIOUS"
Exiles -> "EXILES"
Pirates -> "PIRATES"
Raiders -> "RAIDERS"
Clan -> "CLAN"
Guild -> "GUILD"
Dominion -> "DOMINION"
Fringe -> "FRINGE"
Forsaken -> "FORSAKEN"
Isolated -> "ISOLATED"
Localized -> "LOCALIZED"
Established -> "ESTABLISHED"
Notable -> "NOTABLE"
Dominant -> "DOMINANT"
Inescapable -> "INESCAPABLE"
Innovative -> "INNOVATIVE"
Bold -> "BOLD"
Visionary -> "VISIONARY"
Curious -> "CURIOUS"
Daring -> "DARING"
Exploratory -> "EXPLORATORY"
Resourceful -> "RESOURCEFUL"
Flexible -> "FLEXIBLE"
Cooperative -> "COOPERATIVE"
United -> "UNITED"
Strategic -> "STRATEGIC"
Intelligent -> "INTELLIGENT"
ResearchFocused -> "RESEARCH_FOCUSED"
Collaborative -> "COLLABORATIVE"
Progressive -> "PROGRESSIVE"
Militaristic -> "MILITARISTIC"
TechnologicallyAdvanced -> "TECHNOLOGICALLY_ADVANCED"
Aggressive -> "AGGRESSIVE"
Imperialistic -> "IMPERIALISTIC"
TreasureHunters -> "TREASURE_HUNTERS"
Dexterous -> "DEXTEROUS"
Unpredictable -> "UNPREDICTABLE"
Brutal -> "BRUTAL"
Fleeting -> "FLEETING"
Adaptable -> "ADAPTABLE"
SelfSufficient -> "SELF_SUFFICIENT"
Defensive -> "DEFENSIVE"
Proud -> "PROUD"
Diverse -> "DIVERSE"
Independent -> "INDEPENDENT"
SelfInterested -> "SELF_INTERESTED"
Fragmented -> "FRAGMENTED"
Commercial -> "COMMERCIAL"
FreeMarkets -> "FREE_MARKETS"
Entrepreneurial -> "ENTREPRENEURIAL"
}
}
pub fn encode(faction_trait_symbol: FactionTraitSymbol) -> Json {
json.string(to_string(faction_trait_symbol))
}