LCOV - code coverage report
Current view: top level - libs/utils/src - env.rs (source / functions) Coverage Total Hit
Test: 07bee600374ccd486c69370d0972d9035964fe68.info Lines: 65.6 % 32 21
Test Date: 2025-02-20 13:11:02 Functions: 33.3 % 12 4

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

Generated by: LCOV version 2.1-beta