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

31 lines
863 B
Gleam

import gleam/dynamic/decode.{type Decoder}
import gleam/result
import spacetraders_models/internal/jwt
import spacetraders_models/token_parse_error.{
type TokenParseError, IncorrectType, InvalidToken,
}
pub opaque type AccountToken {
AccountToken(String)
}
pub fn parse(value: String) -> Result(AccountToken, TokenParseError) {
use jwt <- result.try(jwt.parse(value) |> result.replace_error(InvalidToken))
case jwt.payload.subject {
"account-token" -> Ok(AccountToken(value))
_ -> Error(IncorrectType)
}
}
pub fn decoder() -> Decoder(AccountToken) {
use value <- decode.then(decode.string)
case parse(value) {
Ok(token) -> decode.success(token)
Error(_) -> decode.failure(AccountToken("invalid"), "AccountToken")
}
}
pub fn to_string(account_token: AccountToken) -> String {
let AccountToken(value) = account_token
value
}