gleam-spacetraders-sdk/src/models/activity_level.gleam
Lily Rose 64f3729d0c
Some checks are pending
test / test (push) Waiting to run
Refactoring and general tidying up
2025-06-17 19:04:29 +10:00

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