v_utils/utils/
mod.rs

1pub mod eyre;
2pub use eyre::*;
3
4pub mod snapshots;
5pub use snapshots::*;
6
7pub mod format;
8pub use format::*;
9
10pub mod serde;
11pub use serde::*;
12
13#[cfg(feature = "tracing")]
14pub mod tracing;
15#[cfg(feature = "tracing")]
16pub use tracing::*;
17
18/// # HACK
19/// Assumes that `color_eyre` is in scope
20#[cfg(feature = "tracing")]
21#[macro_export]
22macro_rules! clientside {
23	() => {
24		color_eyre::install().unwrap();
25		v_utils::utils::init_subscriber(v_utils::utils::LogDestination::xdg(env!("CARGO_PKG_NAME")));
26	};
27	($fname:expr) => {
28		color_eyre::install().unwrap();
29		v_utils::utils::init_subscriber(v_utils::utils::LogDestination::xdg(env!("CARGO_PKG_NAME")).fname($fname));
30	};
31}
32
33#[macro_export]
34macro_rules! define_str_enum {
35  ($(#[$meta:meta])* $vis:vis enum $name:ident {
36    $($(#[$variant_meta:meta])* $variant:ident => $str:expr),* $(,)?
37  }) => {
38    $(#[$meta])*
39    $vis enum $name {
40      $($(#[$variant_meta])* $variant),*
41    }
42
43    impl std::fmt::Display for $name {
44      fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
45        match self {
46          $(Self::$variant => write!(f, "{}", $str)),*
47        }
48      }
49    }
50
51    impl std::str::FromStr for $name {
52      type Err = eyre::Report;
53
54      fn from_str(s: &str) -> Result<Self, Self::Err> {
55        match s {
56          $($str => Ok(Self::$variant)),*,
57          _ => eyre::bail!("Invalid {} string: {}", stringify!($name).to_lowercase(), s),
58        }
59      }
60    }
61  };
62}