gleam-spacetraders-sdk/test/spacetraders_sdk_test/env.gleam

55 lines
1.4 KiB
Gleam

import dot_env
import dot_env/env
import gleam/result
import spacetraders_sdk.{type AccountToken, type AgentToken}
pub type Env {
Env(account_token: AccountToken, agent_token: AgentToken)
}
pub type EnvError {
MissingVar(name: String)
InvalidVar(name: String)
}
pub fn get_account_token() -> Result(AccountToken, EnvError) {
env.get_string("ACCOUNT_TOKEN")
|> result.replace_error(MissingVar("ACCOUNT_TOKEN"))
|> result.then(fn(value) {
spacetraders_sdk.parse_account_token(value)
|> result.replace_error(InvalidVar("ACCOUNT_TOKEN"))
})
}
pub fn get_agent_token() -> Result(AgentToken, EnvError) {
env.get_string("AGENT_TOKEN")
|> result.replace_error(MissingVar("AGENT_TOKEN"))
|> result.then(fn(value) {
spacetraders_sdk.parse_agent_token(value)
|> result.replace_error(InvalidVar("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_dotenv() -> Result(Env, EnvError) {
dot_env.load_default()
load_env()
}
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:)
}
pub fn load_dotenv_unsafe() -> Env {
dot_env.load_default()
load_env_unsafe()
}