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}