48 lines
1.3 KiB
Gleam
48 lines
1.3 KiB
Gleam
import envoy
|
|
import gleam/result
|
|
import spacetraders_sdk.{
|
|
type AccountToken, type AgentToken, 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.then(fn(value) {
|
|
parse(value) |> result.map_error(InvalidTokenVar(name:, error: _))
|
|
})
|
|
}
|
|
|
|
pub fn get_account_token() -> Result(AccountToken, EnvError) {
|
|
get_token("ACCOUNT_TOKEN", spacetraders_sdk.parse_account_token)
|
|
}
|
|
|
|
pub fn get_agent_token() -> Result(AgentToken, EnvError) {
|
|
get_token("AGENT_TOKEN", spacetraders_sdk.parse_agent_token)
|
|
}
|
|
|
|
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:)
|
|
}
|