co_identity/resolvers/
memory.rs1use crate::{
5 Identity, IdentityBox, IdentityResolver, IdentityResolverError, PrivateIdentityBox, PrivateIdentityResolver,
6};
7use async_trait::async_trait;
8use co_primitives::Did;
9use std::{
10 collections::HashMap,
11 sync::{Arc, Mutex},
12};
13
14#[derive(Debug, Clone, Default)]
15pub struct MemoryIdentityResolver {
16 identites: Arc<Mutex<HashMap<Did, IdentityBox>>>,
17}
18impl MemoryIdentityResolver {
19 pub async fn insert(&mut self, identity: IdentityBox) {
20 self.identites.lock().unwrap().insert(identity.identity().to_owned(), identity);
21 }
22}
23#[async_trait]
24impl IdentityResolver for MemoryIdentityResolver {
25 async fn resolve(&self, identity: &str) -> Result<IdentityBox, IdentityResolverError> {
26 self.identites
27 .lock()
28 .unwrap()
29 .get(identity)
30 .cloned()
31 .ok_or(IdentityResolverError::NotFound)
32 }
33}
34
35#[derive(Debug, Clone, Default)]
36pub struct MemoryPrivateIdentityResolver {
37 identites: Arc<Mutex<HashMap<Did, PrivateIdentityBox>>>,
38}
39impl MemoryPrivateIdentityResolver {
40 pub fn from(iter: impl IntoIterator<Item = PrivateIdentityBox>) -> Self {
41 Self {
42 identites: Arc::new(Mutex::new(
43 iter.into_iter()
44 .map(|identity| (identity.identity().to_owned(), identity))
45 .collect(),
46 )),
47 }
48 }
49
50 pub async fn insert(&self, identity: PrivateIdentityBox) {
51 self.identites.lock().unwrap().insert(identity.identity().to_owned(), identity);
52 }
53}
54#[async_trait]
55impl PrivateIdentityResolver for MemoryPrivateIdentityResolver {
56 async fn resolve_private(&self, identity: &str) -> Result<PrivateIdentityBox, IdentityResolverError> {
57 self.identites
58 .lock()
59 .unwrap()
60 .get(identity)
61 .cloned()
62 .ok_or(IdentityResolverError::NotFound)
63 }
64}