WIP
This commit is contained in:
34
crete/src/secret.rs
Normal file
34
crete/src/secret.rs
Normal file
@@ -0,0 +1,34 @@
|
||||
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,
|
||||
);
|
||||
Reference in New Issue
Block a user