Skip to main content

email/serde/
mod.rs

1#[allow(unused_macros)]
2macro_rules! serde_deprecated {
3    ($name:ident, $from:literal, $to:literal) => {
4        paste::paste! {
5            fn [<$name _deprecated>]<'de, D: serde::Deserializer<'de>, T>(_: D) -> Result<T, D::Error> {
6		let msg = format!("deprecated field {}, use {} instead", $from, $to);
7                Err(serde::de::Error::custom(msg))
8            }
9        }
10    };
11}
12
13use std::fmt;
14
15use serde::{
16    de::{Error, Visitor},
17    Deserializer,
18};
19use shellexpand_utils::shellexpand_str;
20
21#[allow(unused_imports)]
22pub(crate) use serde_deprecated;
23
24struct ShellExpandedStringVisitor;
25
26impl<'de> Visitor<'de> for ShellExpandedStringVisitor {
27    type Value = String;
28
29    fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
30        formatter.write_str("an string containing environment variable(s)")
31    }
32
33    fn visit_string<E: Error>(self, v: String) -> Result<Self::Value, E> {
34        Ok(shellexpand_str(v))
35    }
36}
37
38pub fn deserialize_shell_expanded_string<'de, D: Deserializer<'de>>(
39    deserializer: D,
40) -> Result<String, D::Error> {
41    deserializer.deserialize_string(ShellExpandedStringVisitor)
42}