use std::collections::{BTreeMap, HashMap};
use serde::{Deserialize, Serialize};
pub const VAULT_VERSION: &str = "2.0";
pub const DEFAULT_VAULT_NAME: &str = ".murk";
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Vault {
pub version: String,
pub created: String,
pub vault_name: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub repo: String,
pub recipients: Vec<String>,
pub schema: BTreeMap<String, SchemaEntry>,
pub secrets: BTreeMap<String, SecretEntry>,
pub meta: String,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct SchemaEntry {
pub description: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub example: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub tags: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub created: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub updated: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SecretEntry {
pub shared: String,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub scoped: BTreeMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Meta {
pub recipients: HashMap<String, String>,
pub mac: String,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "hmac_key")]
pub mac_key: Option<String>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub github_pins: HashMap<String, Vec<String>>,
}
#[derive(Debug, Clone)]
pub struct Murk {
pub values: HashMap<String, String>,
pub recipients: HashMap<String, String>,
pub scoped: HashMap<String, HashMap<String, String>>,
pub legacy_mac: bool,
pub github_pins: HashMap<String, Vec<String>>,
}