README.md

# redact

[![Package Version](https://img.shields.io/hexpm/v/redact)](https://hex.pm/packages/redact)
[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/redact/)


```sh
gleam add redact@1
```
```rust
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

```sh
gleam test  # Run the tests
```