pub mod resolvers;
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::error::Result;
#[cfg(feature = "uniffi")]
#[async_trait]
pub trait SecretsResolver: Sync {
async fn get_secret(&self, secret_id: &str) -> Result<Option<Secret>>;
async fn find_secrets<'a>(&self, secret_ids: &'a [&'a str]) -> Result<Vec<&'a str>>;
}
#[cfg(not(feature = "uniffi"))]
#[async_trait(?Send)]
pub trait SecretsResolver {
async fn get_secret(&self, secret_id: &str) -> Result<Option<Secret>>;
async fn find_secrets<'a>(&self, secret_ids: &'a [&'a str]) -> Result<Vec<&'a str>>;
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Secret {
pub id: String,
#[serde(rename = "type")]
pub type_: SecretType,
#[serde(flatten)]
pub secret_material: SecretMaterial,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub enum SecretType {
JsonWebKey2020,
X25519KeyAgreementKey2019,
X25519KeyAgreementKey2020,
Ed25519VerificationKey2018,
Ed25519VerificationKey2020,
EcdsaSecp256k1VerificationKey2019,
Other,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(untagged)]
pub enum SecretMaterial {
#[serde(rename_all = "camelCase")]
JWK { private_key_jwk: Value },
#[serde(rename_all = "camelCase")]
Multibase { private_key_multibase: String },
#[serde(rename_all = "camelCase")]
Base58 { private_key_base58: String },
}