use capsec_core::cap::Cap;
use capsec_core::cap_provider::CapProvider;
use capsec_core::error::CapSecError;
use capsec_core::permission::{EnvRead, EnvWrite};
pub fn var(key: &str, cap: &impl CapProvider<EnvRead>) -> Result<String, CapSecError> {
let _proof: Cap<EnvRead> = cap.provide_cap(key)?;
Ok(std::env::var(key)?)
}
pub fn vars(cap: &impl CapProvider<EnvRead>) -> Result<std::env::Vars, CapSecError> {
let _proof: Cap<EnvRead> = cap.provide_cap("*")?;
Ok(std::env::vars())
}
pub fn set_var(
key: impl AsRef<std::ffi::OsStr>,
value: impl AsRef<std::ffi::OsStr>,
cap: &impl CapProvider<EnvWrite>,
) -> Result<(), CapSecError> {
let _proof: Cap<EnvWrite> = cap.provide_cap(&key.as_ref().to_string_lossy())?;
unsafe {
std::env::set_var(key, value);
}
Ok(())
}