use crate::types::capability::LdpCapability;
use crate::types::payload::PayloadMode;
use crate::types::trust::TrustDomain;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LdpIdentityCard {
pub delegate_id: String,
pub name: String,
pub description: Option<String>,
pub model_family: String,
pub model_version: String,
pub weights_fingerprint: Option<String>,
pub trust_domain: TrustDomain,
pub context_window: u64,
pub reasoning_profile: Option<String>,
pub cost_profile: Option<String>,
pub latency_profile: Option<String>,
pub jurisdiction: Option<String>,
pub capabilities: Vec<LdpCapability>,
pub supported_payload_modes: Vec<PayloadMode>,
pub endpoint: String,
#[serde(default)]
pub metadata: HashMap<String, String>,
}
impl LdpIdentityCard {
pub fn to_labels(&self) -> HashMap<String, String> {
let mut labels = HashMap::new();
labels.insert("ldp.delegate_id".into(), self.delegate_id.clone());
labels.insert("ldp.model_family".into(), self.model_family.clone());
labels.insert("ldp.model_version".into(), self.model_version.clone());
labels.insert("ldp.trust_domain".into(), self.trust_domain.name.clone());
labels.insert("ldp.context_window".into(), self.context_window.to_string());
if let Some(ref fp) = self.weights_fingerprint {
labels.insert("ldp.weights_fingerprint".into(), fp.clone());
}
if let Some(ref rp) = self.reasoning_profile {
labels.insert("ldp.reasoning_profile".into(), rp.clone());
}
if let Some(ref cp) = self.cost_profile {
labels.insert("ldp.cost_profile".into(), cp.clone());
}
if let Some(ref lp) = self.latency_profile {
labels.insert("ldp.latency_profile".into(), lp.clone());
}
if let Some(ref j) = self.jurisdiction {
labels.insert("ldp.jurisdiction".into(), j.clone());
}
let modes: Vec<String> = self
.supported_payload_modes
.iter()
.map(|m| m.to_string())
.collect();
labels.insert("ldp.payload_modes".into(), modes.join(","));
labels
}
}