35 lines
942 B
Rust
35 lines
942 B
Rust
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Deserializer, Serialize};
|
|
|
|
use crate::base_dir;
|
|
|
|
#[derive(Debug, Deserialize, JsonSchema)]
|
|
#[serde(rename_all = "camelCase", untagged)]
|
|
enum SecretHelper {
|
|
String(String),
|
|
File { file: String },
|
|
}
|
|
|
|
pub(crate) fn deserialize_secret<'de, D>(deserializer: D) -> Result<String, D::Error>
|
|
where
|
|
D: Deserializer<'de>,
|
|
{
|
|
let secret: SecretHelper = Deserialize::deserialize(deserializer)?;
|
|
let value = match secret {
|
|
SecretHelper::String(value) => value,
|
|
SecretHelper::File { file } => {
|
|
let path = base_dir().join("secrets").join(file);
|
|
std::fs::read_to_string(path).unwrap().trim().to_owned()
|
|
}
|
|
};
|
|
|
|
Ok(value)
|
|
}
|
|
|
|
#[derive(Debug, Serialize, Deserialize, JsonSchema, Clone, PartialEq, Eq)]
|
|
pub(crate) struct Secret(
|
|
#[serde(deserialize_with = "deserialize_secret")]
|
|
#[schemars(with = "SecretHelper")]
|
|
String,
|
|
);
|