co_identity/types/
private_resolver.rs1use crate::{IdentityResolverError, PrivateIdentityBox};
5use async_trait::async_trait;
6use std::{fmt::Debug, sync::Arc};
7
8#[async_trait]
9pub trait PrivateIdentityResolver: Debug {
10 async fn resolve_private(&self, identity: &str) -> Result<PrivateIdentityBox, IdentityResolverError>;
11
12 fn boxed(self) -> PrivateIdentityResolverBox
13 where
14 Self: Sized + Clone + Send + Sync + 'static,
15 {
16 PrivateIdentityResolverBox::new(self)
17 }
18}
19
20#[derive(Debug, Clone)]
22pub struct PrivateIdentityResolverBox {
23 resolver: Arc<dyn PrivateIdentityResolver + Send + Sync + 'static>,
24}
25impl PrivateIdentityResolverBox {
26 pub fn new<R: PrivateIdentityResolver + Clone + Send + Sync + 'static>(resolver: R) -> Self {
27 Self { resolver: Arc::new(resolver) }
28 }
29}
30#[async_trait]
31impl PrivateIdentityResolver for PrivateIdentityResolverBox {
32 async fn resolve_private(&self, identity: &str) -> Result<PrivateIdentityBox, IdentityResolverError> {
33 self.resolver.resolve_private(identity).await
34 }
35}