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