Skip to main content

gh_workflow/
secrets.rs

1//!
2//! Secrets for GitHub workflow secrets and security.
3
4use indexmap::IndexMap;
5use serde::{Deserialize, Deserializer, Serialize, Serializer};
6
7/// Represents secrets required for the workflow or job or step.
8#[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}