gleam-spacetraders-api-httpc/test/spacetraders_api_httpc_test/env.gleam
Lily Rose b981c6dec7
Some checks are pending
test / test (push) Waiting to run
Initial commit
2025-07-09 03:10:43 +10:00

48 lines
1.4 KiB
Gleam

import envoy
import gleam/result
import spacetraders_models/account_token.{type AccountToken}
import spacetraders_models/agent_token.{type AgentToken}
import spacetraders_models/token_parse_error.{type TokenParseError}
pub type Env {
Env(account_token: AccountToken, agent_token: AgentToken)
}
pub type EnvError {
MissingVar(name: String)
InvalidTokenVar(name: String, error: TokenParseError)
}
fn get(name: String) -> Result(String, EnvError) {
envoy.get(name)
|> result.replace_error(MissingVar(name:))
}
fn get_token(name: String, parse: fn(String) -> Result(token, TokenParseError)) {
get(name)
|> result.try(fn(value) {
parse(value) |> result.map_error(InvalidTokenVar(name:, error: _))
})
}
pub fn get_account_token() -> Result(AccountToken, EnvError) {
get_token("ACCOUNT_TOKEN", account_token.parse)
}
pub fn get_agent_token() -> Result(AgentToken, EnvError) {
get_token("AGENT_TOKEN", agent_token.parse)
}
pub fn load_env() -> Result(Env, EnvError) {
use account_token <- result.try(get_account_token())
use agent_token <- result.try(get_agent_token())
Ok(Env(account_token:, agent_token:))
}
pub fn load_env_unsafe() -> Env {
let assert Ok(account_token) = get_account_token()
as "Missing or invalid account token"
let assert Ok(agent_token) = get_agent_token()
as "Missing or invalid agent token"
Env(account_token:, agent_token:)
}