use crate::error::Result;
use crate::types::{PaginationParams, Tag};
use crate::wami::identity::User;
use async_trait::async_trait;
#[async_trait]
pub trait UserStore: Send + Sync {
async fn create_user(&mut self, user: User) -> Result<User>;
async fn get_user(&self, user_name: &str) -> Result<Option<User>>;
async fn update_user(&mut self, user: User) -> Result<User>;
async fn delete_user(&mut self, user_name: &str) -> Result<()>;
async fn list_users(
&self,
path_prefix: Option<&str>,
pagination: Option<&PaginationParams>,
) -> Result<(Vec<User>, bool, Option<String>)>;
async fn tag_user(&mut self, user_name: &str, tags: Vec<Tag>) -> Result<()>;
async fn list_user_tags(&self, user_name: &str) -> Result<Vec<Tag>>;
async fn untag_user(&mut self, user_name: &str, tag_keys: Vec<String>) -> Result<()>;
}