55 lines
1.2 KiB
Gleam
55 lines
1.2 KiB
Gleam
import gleam/dynamic/decode.{type Decoder}
|
|
import gleam/json.{type Json}
|
|
|
|
pub type RefinementProduce {
|
|
Iron
|
|
Copper
|
|
Silver
|
|
Gold
|
|
Aluminum
|
|
Platinum
|
|
Uranite
|
|
Meritium
|
|
Fuel
|
|
}
|
|
|
|
pub fn parse(value: String) -> Result(RefinementProduce, Nil) {
|
|
case value {
|
|
"IRON" -> Ok(Iron)
|
|
"COPPER" -> Ok(Copper)
|
|
"SILVER" -> Ok(Silver)
|
|
"GOLD" -> Ok(Gold)
|
|
"ALUMINUM" -> Ok(Aluminum)
|
|
"PLATINUM" -> Ok(Platinum)
|
|
"URANITE" -> Ok(Uranite)
|
|
"MERITIUM" -> Ok(Meritium)
|
|
"FUEL" -> Ok(Fuel)
|
|
_ -> Error(Nil)
|
|
}
|
|
}
|
|
|
|
pub fn decoder() -> Decoder(RefinementProduce) {
|
|
use value <- decode.then(decode.string)
|
|
case parse(value) {
|
|
Ok(refinement_produce) -> decode.success(refinement_produce)
|
|
Error(Nil) -> decode.failure(Iron, "RefinementProduce")
|
|
}
|
|
}
|
|
|
|
pub fn to_string(refinement_produce: RefinementProduce) -> String {
|
|
case refinement_produce {
|
|
Iron -> "IRON"
|
|
Copper -> "COPPER"
|
|
Silver -> "SILVER"
|
|
Gold -> "GOLD"
|
|
Aluminum -> "ALUMINUM"
|
|
Platinum -> "PLATINUM"
|
|
Uranite -> "URANITE"
|
|
Meritium -> "MERITIUM"
|
|
Fuel -> "FUEL"
|
|
}
|
|
}
|
|
|
|
pub fn encode(refinement_produce: RefinementProduce) -> Json {
|
|
json.string(to_string(refinement_produce))
|
|
}
|