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)) }