secret-vault 1.19.0

Library provides a secure vault to store securely application secrets in memory from Google/AWS/K8S and environment variables
Documentation
use crate::*;

pub struct SecretVaultBuilder<
    S: SecretsSource + Sync + Send,
    E: SecretVaultEncryption + Sync + Send = SecretVaultNoEncryption,
> {
    source: S,
    encryption: E,
    refs: Vec<SecretVaultRef>,
}

impl<S> SecretVaultBuilder<S, SecretVaultNoEncryption>
where
    S: SecretsSource + Sync + Send,
{
    pub fn with_source(source: S) -> SecretVaultBuilder<S, SecretVaultNoEncryption> {
        SecretVaultBuilder {
            source,
            encryption: SecretVaultNoEncryption {},
            refs: Vec::new(),
        }
    }
}

impl<S, E> SecretVaultBuilder<S, E>
where
    S: SecretsSource + Sync + Send,
    E: SecretVaultEncryption + Sync + Send,
{
    pub fn with_encryption<NE>(self, encryption: NE) -> SecretVaultBuilder<S, NE>
    where
        NE: SecretVaultEncryption + Sync + Send,
    {
        SecretVaultBuilder {
            source: self.source,
            encryption,
            refs: Vec::new(),
        }
    }

    pub fn without_encryption(self) -> SecretVaultBuilder<S, SecretVaultNoEncryption>
    where
        E: Sync + Send,
    {
        SecretVaultBuilder {
            source: self.source,
            encryption: SecretVaultNoEncryption {},
            refs: Vec::new(),
        }
    }

    pub fn with_secret_refs(self, secret_refs: Vec<&SecretVaultRef>) -> SecretVaultBuilder<S, E> {
        SecretVaultBuilder {
            source: self.source,
            encryption: self.encryption,
            refs: secret_refs.into_iter().cloned().collect(),
        }
    }

    pub fn build(self) -> SecretVaultResult<SecretVault<S, E>> {
        let vault = SecretVault::new(self.source, self.encryption)?;

        Ok(if !self.refs.is_empty() {
            vault.with_secret_refs(self.refs.iter().collect())
        } else {
            vault
        })
    }
}