use crate::orchestrator::email_address::EmailAddress;
use crate::orchestrator::enroll::auth0::UserInfo;
use ockam_core::async_trait;
use ockam_core::Result;
use ockam_node::database::AutoRetry;
use ockam_node::retry;
#[async_trait]
pub trait UsersRepository: Send + Sync + 'static {
async fn store_user(&self, user: &UserInfo) -> Result<()>;
async fn get_default_user(&self) -> Result<Option<UserInfo>>;
async fn set_default_user(&self, email: &EmailAddress) -> Result<()>;
async fn get_user(&self, email: &EmailAddress) -> Result<Option<UserInfo>>;
async fn get_users(&self) -> Result<Vec<UserInfo>>;
async fn delete_user(&self, email: &EmailAddress) -> Result<()>;
}
#[async_trait]
impl<T: UsersRepository> UsersRepository for AutoRetry<T> {
async fn store_user(&self, user: &UserInfo) -> ockam_core::Result<()> {
retry!(self.wrapped.store_user(user))
}
async fn get_default_user(&self) -> ockam_core::Result<Option<UserInfo>> {
retry!(self.wrapped.get_default_user())
}
async fn set_default_user(&self, email: &EmailAddress) -> ockam_core::Result<()> {
retry!(self.wrapped.set_default_user(email))
}
async fn get_user(&self, email: &EmailAddress) -> ockam_core::Result<Option<UserInfo>> {
retry!(self.wrapped.get_user(email))
}
async fn get_users(&self) -> ockam_core::Result<Vec<UserInfo>> {
retry!(self.wrapped.get_users())
}
async fn delete_user(&self, email: &EmailAddress) -> ockam_core::Result<()> {
retry!(self.wrapped.delete_user(email))
}
}