wami 0.10.0

Who Am I - Multicloud Identity, IAM, STS, and SSO operations library for Rust
Documentation
//! Permission Set Store Implementation for InMemorySsoAdminStore

use crate::error::Result;
use crate::store::memory::sso_admin::InMemorySsoAdminStore;
use crate::store::traits::PermissionSetStore;
use crate::wami::sso_admin::PermissionSet;
use async_trait::async_trait;

#[async_trait]
impl PermissionSetStore for InMemorySsoAdminStore {
    async fn create_permission_set(
        &mut self,
        permission_set: PermissionSet,
    ) -> Result<PermissionSet> {
        self.permission_sets.insert(
            permission_set.permission_set_arn.clone(),
            permission_set.clone(),
        );
        Ok(permission_set)
    }

    async fn get_permission_set(&self, permission_set_arn: &str) -> Result<Option<PermissionSet>> {
        Ok(self.permission_sets.get(permission_set_arn).cloned())
    }

    async fn update_permission_set(
        &mut self,
        permission_set: PermissionSet,
    ) -> Result<PermissionSet> {
        self.permission_sets.insert(
            permission_set.permission_set_arn.clone(),
            permission_set.clone(),
        );
        Ok(permission_set)
    }

    async fn delete_permission_set(&mut self, permission_set_arn: &str) -> Result<()> {
        self.permission_sets.remove(permission_set_arn);
        Ok(())
    }

    async fn list_permission_sets(&self, _instance_arn: &str) -> Result<Vec<PermissionSet>> {
        Ok(self.permission_sets.values().cloned().collect())
    }
}

/// Implement PermissionSetStore for InMemoryWamiStore (the main unified store)
#[async_trait]
impl PermissionSetStore for super::super::wami::InMemoryWamiStore {
    async fn create_permission_set(
        &mut self,
        permission_set: PermissionSet,
    ) -> Result<PermissionSet> {
        self.permission_sets.insert(
            permission_set.permission_set_arn.clone(),
            permission_set.clone(),
        );
        Ok(permission_set)
    }

    async fn get_permission_set(&self, permission_set_arn: &str) -> Result<Option<PermissionSet>> {
        Ok(self.permission_sets.get(permission_set_arn).cloned())
    }

    async fn update_permission_set(
        &mut self,
        permission_set: PermissionSet,
    ) -> Result<PermissionSet> {
        self.permission_sets.insert(
            permission_set.permission_set_arn.clone(),
            permission_set.clone(),
        );
        Ok(permission_set)
    }

    async fn delete_permission_set(&mut self, permission_set_arn: &str) -> Result<()> {
        self.permission_sets.remove(permission_set_arn);
        Ok(())
    }

    async fn list_permission_sets(&self, instance_arn: &str) -> Result<Vec<PermissionSet>> {
        Ok(self
            .permission_sets
            .values()
            .filter(|ps| ps.instance_arn == instance_arn)
            .cloned()
            .collect())
    }
}