37 lines
764 B
Gleam
37 lines
764 B
Gleam
import gleam/dynamic/decode.{type Decoder}
|
|
import gleam/json.{type Json}
|
|
|
|
pub type SurveySize {
|
|
Small
|
|
Moderate
|
|
Large
|
|
}
|
|
|
|
pub fn parse(value: String) -> Result(SurveySize, Nil) {
|
|
case value {
|
|
"SMALL" -> Ok(Small)
|
|
"MODERATE" -> Ok(Moderate)
|
|
"LARGE" -> Ok(Large)
|
|
_ -> Error(Nil)
|
|
}
|
|
}
|
|
|
|
pub fn decoder() -> Decoder(SurveySize) {
|
|
use value <- decode.then(decode.string)
|
|
case parse(value) {
|
|
Ok(survey_size) -> decode.success(survey_size)
|
|
Error(Nil) -> decode.failure(Small, "SurveySize")
|
|
}
|
|
}
|
|
|
|
pub fn to_string(survey_size: SurveySize) -> String {
|
|
case survey_size {
|
|
Small -> "SMALL"
|
|
Moderate -> "MODERATE"
|
|
Large -> "LARGE"
|
|
}
|
|
}
|
|
|
|
pub fn encode(survey_size: SurveySize) -> Json {
|
|
json.string(to_string(survey_size))
|
|
}
|