use crate::cli_state::NamedIdentity;
use ockam::identity::Identifier;
use ockam_core::async_trait;
use ockam_core::Result;
use ockam_node::database::AutoRetry;
use ockam_node::retry;
#[async_trait]
pub trait IdentitiesRepository: Send + Sync + 'static {
async fn store_named_identity(
&self,
identifier: &Identifier,
name: &str,
vault_name: &str,
) -> Result<NamedIdentity>;
async fn delete_identity(&self, name: &str) -> Result<Option<Identifier>>;
async fn delete_identity_by_identifier(
&self,
identifier: &Identifier,
) -> Result<Option<String>>;
async fn update_name(&self, identifier: &Identifier, name: &str) -> Result<()>;
async fn get_identifier(&self, name: &str) -> Result<Option<Identifier>>;
async fn get_identity_name_by_identifier(
&self,
identifier: &Identifier,
) -> Result<Option<String>>;
async fn get_named_identity(&self, name: &str) -> Result<Option<NamedIdentity>>;
async fn get_named_identity_by_identifier(
&self,
identifier: &Identifier,
) -> Result<Option<NamedIdentity>>;
async fn get_named_identities(&self) -> Result<Vec<NamedIdentity>>;
async fn get_named_identities_by_vault_name(
&self,
vault_name: &str,
) -> Result<Vec<NamedIdentity>>;
async fn set_as_default(&self, name: &str) -> Result<()>;
async fn set_as_default_by_identifier(&self, identifier: &Identifier) -> Result<()>;
async fn get_default_named_identity(&self) -> Result<Option<NamedIdentity>>;
}
#[async_trait]
impl<T: IdentitiesRepository + Send + Sync + 'static> IdentitiesRepository for AutoRetry<T> {
async fn store_named_identity(
&self,
identifier: &Identifier,
name: &str,
vault_name: &str,
) -> Result<NamedIdentity> {
retry!(self
.wrapped
.store_named_identity(identifier, name, vault_name))
}
async fn delete_identity(&self, name: &str) -> Result<Option<Identifier>> {
retry!(self.wrapped.delete_identity(name))
}
async fn delete_identity_by_identifier(
&self,
identifier: &Identifier,
) -> Result<Option<String>> {
retry!(self.wrapped.delete_identity_by_identifier(identifier))
}
async fn update_name(&self, identifier: &Identifier, name: &str) -> Result<()> {
retry!(self.wrapped.update_name(identifier, name))
}
async fn get_identifier(&self, name: &str) -> Result<Option<Identifier>> {
retry!(self.wrapped.get_identifier(name))
}
async fn get_identity_name_by_identifier(
&self,
identifier: &Identifier,
) -> Result<Option<String>> {
retry!(self.wrapped.get_identity_name_by_identifier(identifier))
}
async fn get_named_identity(&self, name: &str) -> Result<Option<NamedIdentity>> {
retry!(self.wrapped.get_named_identity(name))
}
async fn get_named_identity_by_identifier(
&self,
identifier: &Identifier,
) -> Result<Option<NamedIdentity>> {
retry!(self.wrapped.get_named_identity_by_identifier(identifier))
}
async fn get_named_identities(&self) -> Result<Vec<NamedIdentity>> {
retry!(self.wrapped.get_named_identities())
}
async fn get_named_identities_by_vault_name(
&self,
vault_name: &str,
) -> Result<Vec<NamedIdentity>> {
retry!(self.wrapped.get_named_identities_by_vault_name(vault_name))
}
async fn set_as_default(&self, name: &str) -> Result<()> {
retry!(self.wrapped.set_as_default(name))
}
async fn set_as_default_by_identifier(&self, identifier: &Identifier) -> Result<()> {
retry!(self.wrapped.set_as_default_by_identifier(identifier))
}
async fn get_default_named_identity(&self) -> Result<Option<NamedIdentity>> {
retry!(self.wrapped.get_default_named_identity())
}
}