205 lines
5.2 KiB
Gleam
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))
|
|
}
|