mesh_llm_identity/
provider.rs1use 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}