use crate::error::Result;
use crate::types::PaginationParams;
use crate::wami::identity::Group;
use async_trait::async_trait;
#[async_trait]
pub trait GroupStore: Send + Sync {
async fn create_group(&mut self, group: Group) -> Result<Group>;
async fn get_group(&self, group_name: &str) -> Result<Option<Group>>;
async fn update_group(&mut self, group: Group) -> Result<Group>;
async fn delete_group(&mut self, group_name: &str) -> Result<()>;
async fn list_groups(
&self,
path_prefix: Option<&str>,
pagination: Option<&PaginationParams>,
) -> Result<(Vec<Group>, bool, Option<String>)>;
async fn list_groups_for_user(&self, user_name: &str) -> Result<Vec<Group>>;
async fn add_user_to_group(&mut self, group_name: &str, user_name: &str) -> Result<()>;
async fn remove_user_from_group(&mut self, group_name: &str, user_name: &str) -> Result<()>;
}