28 lines
780 B
Gleam
28 lines
780 B
Gleam
import gleam/dynamic/decode.{type Decoder}
|
|
import gleam/json.{type Json}
|
|
|
|
pub opaque type ShipComponentQuality {
|
|
ShipComponentQuality(Int)
|
|
}
|
|
|
|
pub fn parse(value: Int) -> Result(ShipComponentQuality, Nil) {
|
|
Ok(ShipComponentQuality(value))
|
|
}
|
|
|
|
pub fn decoder() -> Decoder(ShipComponentQuality) {
|
|
use value <- decode.then(decode.int)
|
|
case parse(value) {
|
|
Ok(ship_component_quality) -> decode.success(ship_component_quality)
|
|
Error(Nil) ->
|
|
decode.failure(ShipComponentQuality(0), "ShipComponentQuality")
|
|
}
|
|
}
|
|
|
|
pub fn to_int(ship_component_quality: ShipComponentQuality) -> Int {
|
|
let ShipComponentQuality(value) = ship_component_quality
|
|
value
|
|
}
|
|
|
|
pub fn encode(ship_component_quality: ShipComponentQuality) -> Json {
|
|
json.int(to_int(ship_component_quality))
|
|
}
|