wami 0.10.0

Who Am I - Multicloud Identity, IAM, STS, and SSO operations library for Rust
Documentation
//! Signing Certificate Store Implementation for InMemoryWamiStore

use crate::error::Result;
use crate::store::memory::InMemoryWamiStore;
use crate::store::traits::SigningCertificateStore;
use crate::wami::credentials::signing_certificate::SigningCertificate;
use async_trait::async_trait;

#[async_trait]
impl SigningCertificateStore for InMemoryWamiStore {
    async fn create_signing_certificate(
        &mut self,
        certificate: SigningCertificate,
    ) -> Result<SigningCertificate> {
        self.signing_certificates
            .insert(certificate.certificate_id.clone(), certificate.clone());
        Ok(certificate)
    }

    async fn get_signing_certificate(
        &self,
        certificate_id: &str,
    ) -> Result<Option<SigningCertificate>> {
        Ok(self.signing_certificates.get(certificate_id).cloned())
    }

    async fn update_signing_certificate(
        &mut self,
        certificate: SigningCertificate,
    ) -> Result<SigningCertificate> {
        self.signing_certificates
            .insert(certificate.certificate_id.clone(), certificate.clone());
        Ok(certificate)
    }

    async fn delete_signing_certificate(&mut self, certificate_id: &str) -> Result<()> {
        self.signing_certificates.remove(certificate_id);
        Ok(())
    }

    async fn list_signing_certificates(
        &self,
        user_name: Option<&str>,
    ) -> Result<Vec<SigningCertificate>> {
        let certs: Vec<SigningCertificate> = self
            .signing_certificates
            .values()
            .filter(|cert| user_name.is_none_or(|name| cert.user_name == name))
            .cloned()
            .collect();
        Ok(certs)
    }
}