40 lines
873 B
Gleam
40 lines
873 B
Gleam
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))
|
|
}
|