co-identity 0.1.0

COKIT DID and DIDComm implementations.
Documentation
// SPDX-License-Identifier: AGPL-3.0-only
// Copyright (C) 2026 1io BRANDGUARDIAN GmbH

use crate::{IdentityResolverError, PrivateIdentityBox};
use async_trait::async_trait;
use std::{fmt::Debug, sync::Arc};

#[async_trait]
pub trait PrivateIdentityResolver: Debug {
	async fn resolve_private(&self, identity: &str) -> Result<PrivateIdentityBox, IdentityResolverError>;

	fn boxed(self) -> PrivateIdentityResolverBox
	where
		Self: Sized + Clone + Send + Sync + 'static,
	{
		PrivateIdentityResolverBox::new(self)
	}
}

/// Dynamic Identity Resolver.
#[derive(Debug, Clone)]
pub struct PrivateIdentityResolverBox {
	resolver: Arc<dyn PrivateIdentityResolver + Send + Sync + 'static>,
}
impl PrivateIdentityResolverBox {
	pub fn new<R: PrivateIdentityResolver + Clone + Send + Sync + 'static>(resolver: R) -> Self {
		Self { resolver: Arc::new(resolver) }
	}
}
#[async_trait]
impl PrivateIdentityResolver for PrivateIdentityResolverBox {
	async fn resolve_private(&self, identity: &str) -> Result<PrivateIdentityBox, IdentityResolverError> {
		self.resolver.resolve_private(identity).await
	}
}