use crate::error::Result;
use crate::types::{PaginationParams, Tag};
use crate::wami::identity::identity_provider::{OidcProvider, SamlProvider};
use async_trait::async_trait;
#[async_trait]
pub trait IdentityProviderStore: Send + Sync {
async fn create_saml_provider(&mut self, provider: SamlProvider) -> Result<SamlProvider>;
async fn get_saml_provider(&self, arn: &str) -> Result<Option<SamlProvider>>;
async fn update_saml_provider(&mut self, provider: SamlProvider) -> Result<SamlProvider>;
async fn delete_saml_provider(&mut self, arn: &str) -> Result<()>;
async fn list_saml_providers(
&self,
pagination: Option<&PaginationParams>,
) -> Result<(Vec<SamlProvider>, bool, Option<String>)>;
async fn create_oidc_provider(&mut self, provider: OidcProvider) -> Result<OidcProvider>;
async fn get_oidc_provider(&self, arn: &str) -> Result<Option<OidcProvider>>;
async fn update_oidc_provider(&mut self, provider: OidcProvider) -> Result<OidcProvider>;
async fn delete_oidc_provider(&mut self, arn: &str) -> Result<()>;
async fn list_oidc_providers(
&self,
pagination: Option<&PaginationParams>,
) -> Result<(Vec<OidcProvider>, bool, Option<String>)>;
async fn tag_identity_provider(&mut self, arn: &str, tags: Vec<Tag>) -> Result<()>;
async fn list_identity_provider_tags(&self, arn: &str) -> Result<Vec<Tag>>;
async fn untag_identity_provider(&mut self, arn: &str, tag_keys: Vec<String>) -> Result<()>;
}