gleam-spacetraders-models/src/spacetraders_models/market_symbol.gleam
Lily Rose fab4c9df5d
Some checks are pending
test / test (push) Waiting to run
Initial commit
2025-07-08 23:03:42 +10:00

33 lines
804 B
Gleam

import gleam/dynamic/decode.{type Decoder}
import gleam/json.{type Json}
import gleam/string
pub opaque type MarketSymbol {
MarketSymbol(String)
}
pub const min_length: Int = 1
pub fn parse(value: String) -> Result(MarketSymbol, Nil) {
case string.length(value) >= min_length {
True -> Ok(MarketSymbol(value))
False -> Error(Nil)
}
}
pub fn decoder() -> Decoder(MarketSymbol) {
use value <- decode.then(decode.string)
case parse(value) {
Ok(market_symbol) -> decode.success(market_symbol)
Error(Nil) -> decode.failure(MarketSymbol("invalid"), "MarketSymbol")
}
}
pub fn to_string(market_symbol: MarketSymbol) -> String {
let MarketSymbol(symbol) = market_symbol
symbol
}
pub fn encode(market_symbol: MarketSymbol) -> Json {
json.string(to_string(market_symbol))
}