didcomm/secrets/resolvers/
example.rs1use 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}