import gleam/dynamic/decode.{type Decoder} import gleam/json.{type Json} pub type ActivityLevel { Weak Growing Strong Restricted } pub fn parse(value: String) -> Result(ActivityLevel, Nil) { case value { "WEAK" -> Ok(Weak) "GROWING" -> Ok(Growing) "STRONG" -> Ok(Strong) "RESTRICTED" -> Ok(Restricted) _ -> Error(Nil) } } pub fn decoder() -> Decoder(ActivityLevel) { use value <- decode.then(decode.string) case parse(value) { Ok(activity_level) -> decode.success(activity_level) Error(Nil) -> decode.failure(Weak, "ActivityLevel") } } pub fn to_string(activity_level: ActivityLevel) -> String { case activity_level { Weak -> "WEAK" Growing -> "GROWING" Strong -> "STRONG" Restricted -> "RESTRICTED" } } pub fn encode(activity_level: ActivityLevel) -> Json { json.string(to_string(activity_level)) }