didcomm/secrets/resolvers/
example.rs

1use async_trait::async_trait;
2
3use crate::{
4    error::Result,
5    secrets::{Secret, SecretsResolver},
6};
7
8pub struct ExampleSecretsResolver {
9    known_secrets: Vec<Secret>,
10}
11
12impl ExampleSecretsResolver {
13    pub fn new(known_secrets: Vec<Secret>) -> Self {
14        ExampleSecretsResolver { known_secrets }
15    }
16}
17
18#[cfg_attr(feature = "uniffi", async_trait)]
19#[cfg_attr(not(feature = "uniffi"), async_trait(?Send))]
20impl SecretsResolver for ExampleSecretsResolver {
21    async fn get_secret(&self, secret_id: &str) -> Result<Option<Secret>> {
22        Ok(self
23            .known_secrets
24            .iter()
25            .find(|s| s.id == secret_id)
26            .map(|s| s.clone()))
27    }
28
29    async fn find_secrets<'a>(&self, secret_ids: &'a [&'a str]) -> Result<Vec<&'a str>> {
30        Ok(secret_ids
31            .iter()
32            .filter(|&&sid| self.known_secrets.iter().find(|s| s.id == sid).is_some())
33            .map(|sid| *sid)
34            .collect())
35    }
36}