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