LCOV - code coverage report
Current view: top level - libs/utils/src - env.rs (source / functions) Coverage Total Hit
Test: 2620485e474b48c32427149a5d91ef8fc2cd649e.info Lines: 62.5 % 32 20
Test Date: 2025-05-01 22:50:11 Functions: 28.6 % 14 4

            Line data    Source code
       1              : //! Wrapper around `std::env::var` for parsing environment variables.
       2              : 
       3              : use std::fmt::Display;
       4              : use std::str::FromStr;
       5              : 
       6              : /// For types `V` that implement [`FromStr`].
       7         2523 : pub fn var<V, E>(varname: &str) -> Option<V>
       8         2523 : where
       9         2523 :     V: FromStr<Err = E>,
      10         2523 :     E: Display,
      11         2523 : {
      12         2523 :     match std::env::var(varname) {
      13            0 :         Ok(s) => Some(
      14            0 :             s.parse()
      15            0 :                 .map_err(|e| {
      16            0 :                     format!("failed to parse env var {varname} using FromStr::parse: {e:#}")
      17            0 :                 })
      18            0 :                 .unwrap(),
      19            0 :         ),
      20         2523 :         Err(std::env::VarError::NotPresent) => None,
      21              :         Err(std::env::VarError::NotUnicode(_)) => {
      22            0 :             panic!("env var {varname} is not unicode")
      23              :         }
      24              :     }
      25            3 : }
      26              : 
      27              : /// For types `V` that implement [`serde::de::DeserializeOwned`].
      28          204 : pub fn var_serde_json_string<V>(varname: &str) -> Option<V>
      29          204 : where
      30          204 :     V: serde::de::DeserializeOwned,
      31          204 : {
      32          204 :     match std::env::var(varname) {
      33          204 :         Ok(s) => Some({
      34          204 :             let value = serde_json::Value::String(s);
      35          204 :             serde_json::from_value(value)
      36          204 :                 .map_err(|e| {
      37            0 :                     format!("failed to parse env var {varname} as a serde_json json string: {e:#}")
      38          204 :                 })
      39          204 :                 .unwrap()
      40          204 :         }),
      41            0 :         Err(std::env::VarError::NotPresent) => None,
      42              :         Err(std::env::VarError::NotUnicode(_)) => {
      43            0 :             panic!("env var {varname} is not unicode")
      44              :         }
      45              :     }
      46            0 : }
        

Generated by: LCOV version 2.1-beta