redact

Package Version Hex Docs

gleam add redact@1
import envoy
import gleam/int
import gleam/result
import redact/secret

pub type Env {
  Env(
    database_url: secret.Secret(String),
    port: Int,
    secret_key: secret.Secret(String),
  )
}

pub fn extract_env() -> Result(Env, String) {
  use database_url <- result.try(database_url())
  let port = port()
  use secret_key <- result.try(secret_key())

  Ok(Env(database_url:, port:, secret_key:))
}

pub fn database_url() {
  required_env("DATABASE_URL") |> result.map(secret.new)
}

pub fn port() {
  envoy.get("PORT")
  |> result.map(int.parse)
  |> result.flatten()
  |> result.unwrap(8000)
}

pub fn secret_key() {
  required_env("CONDUIT_SECRET_KEY") |> result.map(secret.new)
}

pub fn required_env(name: String) -> Result(String, String) {
  envoy.get(name)
  |> result.replace_error(name <> " not set")
}

Further documentation can be found at https://hexdocs.pm/redact.

Development

gleam test  # Run the tests
Search Document