Skip to main content

pistonite_cu/
env_var.rs

1use std::ffi::OsStr;
2
3use crate::pre::*;
4
5/// Like [`std::env::var`], but treat not-set as empty string.
6/// Tracing and reporting is built-in.
7///
8/// If you need to detect the case where the env var is not set,
9/// use `std::env::var` directly.
10///
11/// ```rust
12/// # use pistonite_cu as cu;
13/// # fn main() -> cu::Result<()> {
14/// assert!(!cu::env_var("CARGO")?.is_empty());
15/// assert!(cu::env_var("NOT_SET")?.is_empty());
16/// # Ok(()) }
17/// ```
18#[inline(always)]
19pub fn env_var(var: impl AsRef<OsStr>) -> crate::Result<String> {
20    env_var_impl(var.as_ref())
21}
22fn env_var_impl(var: &OsStr) -> crate::Result<String> {
23    crate::trace!("reading env var '{}`", var.display());
24    match std::env::var(var) {
25        Ok(v) => Ok(v),
26        Err(std::env::VarError::NotPresent) => Ok(String::new()),
27        Err(e) => {
28            crate::rethrow!(e, "failed to read env var '{}'", var.display());
29        }
30    }
31}