use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use crate::{AgentId, Result, Signature};
#[async_trait]
pub trait IdentityProvider: Send + Sync {
fn agent_id(&self) -> &AgentId;
async fn sign(&self, message: &[u8]) -> Result<Signature>;
async fn verify_peer(
&self,
peer_id: &AgentId,
message: &[u8],
signature: &Signature,
) -> Result<()>;
async fn trust_metadata(&self, _peer_id: &AgentId) -> Option<TrustMetadata> {
None
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct TrustMetadata {
pub verification_level: Option<u8>,
pub reputation_score: Option<f32>,
pub review_count: Option<u32>,
pub capabilities: Vec<String>,
pub flags: Vec<String>,
}