Skip to main content

mesh_llm_identity/
provider.rs

1use crate::keys::OwnerKeypair;
2use thiserror::Error;
3
4#[derive(Debug, Error)]
5pub enum KeyProviderError {
6    #[error("key not available: {0}")]
7    NotAvailable(String),
8}
9
10pub trait KeyProvider: Send + Sync {
11    fn owner_keypair(&self) -> Result<OwnerKeypair, KeyProviderError>;
12    fn mesh_id(&self) -> Result<Option<Vec<u8>>, KeyProviderError>;
13    fn node_id_seed(&self) -> Result<[u8; 32], KeyProviderError>;
14}
15
16pub struct InMemoryKeyProvider {
17    owner: OwnerKeypair,
18    mesh: Option<Vec<u8>>,
19    seed: [u8; 32],
20}
21
22impl InMemoryKeyProvider {
23    pub fn new(owner: OwnerKeypair, mesh: Option<Vec<u8>>, seed: [u8; 32]) -> Self {
24        Self { owner, mesh, seed }
25    }
26}
27
28impl KeyProvider for InMemoryKeyProvider {
29    fn owner_keypair(&self) -> Result<OwnerKeypair, KeyProviderError> {
30        Ok(self.owner.clone())
31    }
32
33    fn mesh_id(&self) -> Result<Option<Vec<u8>>, KeyProviderError> {
34        Ok(self.mesh.clone())
35    }
36
37    fn node_id_seed(&self) -> Result<[u8; 32], KeyProviderError> {
38        Ok(self.seed)
39    }
40}