secret-vault 1.1.3

Library provides a secure vault to store securely application secrets in memory from Google/AWS/K8S and environment variables
Documentation
use chrono::prelude::*;
use rsb_derive::*;
use rvstruct::*;
use secret_vault_value::SecretValue;

#[derive(Debug, Clone, Eq, PartialEq, Hash, ValueStruct)]
pub struct SecretName(String);

#[derive(Debug, Clone, Eq, PartialEq, Hash, ValueStruct)]
pub struct SecretNamespace(String);

#[derive(Debug, Clone, Eq, PartialEq, Hash, ValueStruct)]
pub struct SecretVersion(String);

#[derive(Debug, Clone, Eq, PartialEq, Hash)]
pub struct SecretVaultRef {
    pub key: SecretVaultKey,

    pub required: bool,
    pub auto_refresh: bool,
    pub allow_in_snapshots: bool,
}

impl SecretVaultRef {
    pub fn new(secret_name: SecretName) -> Self {
        Self {
            key: SecretVaultKey::new(secret_name),
            required: true,
            auto_refresh: false,
            allow_in_snapshots: false,
        }
    }

    pub fn with_secret_version(self, value: SecretVersion) -> Self {
        Self {
            key: self.key.with_secret_version(value),
            ..self
        }
    }

    pub fn opt_secret_version(self, value: Option<SecretVersion>) -> Self {
        Self {
            key: self.key.opt_secret_version(value),
            ..self
        }
    }

    pub fn with_namespace(self, value: SecretNamespace) -> Self {
        Self {
            key: self.key.with_namespace(value),
            ..self
        }
    }

    pub fn opt_namespace(self, value: Option<SecretNamespace>) -> Self {
        Self {
            key: self.key.opt_namespace(value),
            ..self
        }
    }

    pub fn with_required(self, value: bool) -> Self {
        Self {
            required: value,
            ..self
        }
    }

    pub fn with_auto_refresh(self, value: bool) -> Self {
        Self {
            auto_refresh: value,
            ..self
        }
    }

    pub fn with_allow_in_snapshots(self, value: bool) -> Self {
        Self {
            allow_in_snapshots: value,
            ..self
        }
    }
}

#[derive(Debug, Clone, Eq, PartialEq, Hash, Builder)]
pub struct SecretVaultKey {
    pub secret_name: SecretName,
    pub secret_version: Option<SecretVersion>,
    pub namespace: Option<SecretNamespace>,
}

#[derive(Debug, Clone, Eq, PartialEq, Hash, Builder)]
pub struct SecretMetadataLabel {
    pub name: String,
    pub value: Option<String>,
}

#[derive(Debug, Clone, Eq, PartialEq, Builder)]
pub struct SecretMetadata {
    #[default = "Utc::now()"]
    pub cached_at: DateTime<Utc>,
    pub key: SecretVaultKey,
    pub labels: Option<Vec<SecretMetadataLabel>>,
    pub description: Option<String>,
    pub expire_at: Option<DateTime<Utc>>,
    pub version: Option<SecretVersion>,
}

#[derive(Debug, Clone, Eq, PartialEq, Builder)]
pub struct Secret {
    pub value: SecretValue,
    pub metadata: SecretMetadata,
}