Skip to main content

co_identity/types/
private_resolver.rs

1// SPDX-License-Identifier: AGPL-3.0-only
2// Copyright (C) 2026 1io BRANDGUARDIAN GmbH
3
4use 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/// Dynamic Identity Resolver.
21#[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}