Skip to main content

open_envault/
lib.rs

1//! Public API for open_envault.
2//!
3//! ```no_run
4//! if let Ok(values) = open_envault::load_environment("dev") {
5//!     let _ = values.contains_key("EXAMPLE");
6//! }
7//! ```
8
9pub mod core;
10pub mod crypto;
11pub mod output;
12pub mod runtime;
13pub mod schema;
14
15use anyhow::Context;
16use std::collections::BTreeMap;
17
18/// Discover the project rooted at the current directory, resolve `name`, and
19/// decrypt + parse that environment profile into an in-memory map.
20pub fn load_environment(name: &str) -> anyhow::Result<BTreeMap<String, String>> {
21    let path = core::discover(&std::env::current_dir()?)?;
22    let project = core::load(&path)?;
23    let profile = core::environment(&project, name)?;
24    let root = path.parent().unwrap_or(&path);
25    let encrypted = core::resolve_path(&profile.file, root);
26    let configured_key = profile
27        .key_file
28        .as_deref()
29        .map(|key| core::resolve_path(key, root));
30    let plaintext =
31        crypto::decrypt_for_with_key_file(&encrypted, Some(name), configured_key.as_deref())
32            .with_context(|| format!("decrypt environment {name}"))?;
33    Ok(schema::parse_env(&plaintext))
34}