1use indexmap::IndexMap;
5use serde::{Deserialize, Deserializer, Serialize, Serializer};
6
7#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
9#[serde(untagged)]
10pub enum Secrets {
11 #[serde(
12 deserialize_with = "deserialize_inherit",
13 serialize_with = "serialize_inherit"
14 )]
15 Inherit,
16 Values(IndexMap<String, String>),
17}
18
19fn deserialize_inherit<'de, D>(deserializer: D) -> Result<(), D::Error>
20where
21 D: Deserializer<'de>,
22{
23 let s: String = Deserialize::deserialize(deserializer)?;
24 if s == "inherit" {
25 Ok(())
26 } else {
27 Err(serde::de::Error::custom("expected string 'inherit'"))
28 }
29}
30
31fn serialize_inherit<S>(serializer: S) -> Result<S::Ok, S::Error>
32where
33 S: Serializer,
34{
35 serializer.serialize_str("inherit")
36}