use crate::wami::identity::Role;
use async_trait::async_trait;
use wami_core::error::Result;
use wami_core::types::PaginationParams;
#[async_trait]
pub trait RoleStore: Send + Sync {
async fn create_role(&mut self, role: Role) -> Result<Role>;
async fn get_role(&self, role_name: &str) -> Result<Option<Role>>;
async fn update_role(&mut self, role: Role) -> Result<Role>;
async fn delete_role(&mut self, role_name: &str) -> Result<()>;
async fn list_roles(
&self,
path_prefix: Option<&str>,
pagination: Option<&PaginationParams>,
) -> Result<(Vec<Role>, bool, Option<String>)>;
async fn attach_role_policy(&mut self, role_name: &str, policy_arn: &str) -> Result<()>;
async fn detach_role_policy(&mut self, role_name: &str, policy_arn: &str) -> Result<()>;
async fn list_attached_role_policies(&self, role_name: &str) -> Result<Vec<String>>;
async fn put_role_policy(
&mut self,
role_name: &str,
policy_name: &str,
policy_document: String,
) -> Result<()>;
async fn get_role_policy(&self, role_name: &str, policy_name: &str) -> Result<Option<String>>;
async fn delete_role_policy(&mut self, role_name: &str, policy_name: &str) -> Result<()>;
async fn list_role_policies(&self, role_name: &str) -> Result<Vec<String>>;
}