# redact
[](https://hex.pm/packages/redact)
[](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
```