#![forbid(unsafe_code)]
use std::collections::BTreeMap;
use std::path::PathBuf;
use crate::contracts::{PluginLifecycleState, PluginManifestV2};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PluginRecord {
pub manifest: PluginManifestV2,
pub state: PluginLifecycleState,
pub source: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub manifest_path: Option<String>,
pub trust_level: PluginTrustLevel,
pub manifest_checksum_sha256: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum PluginTrustLevel {
Core,
Verified,
Community,
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PluginRegistry {
pub version: String,
pub plugins: BTreeMap<String, PluginRecord>,
}
impl Default for PluginRegistry {
fn default() -> Self {
Self { version: super::constants::REGISTRY_VERSION.to_string(), plugins: BTreeMap::new() }
}
}
#[allow(dead_code)]
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct PluginDiscoveryCache {
pub root: PathBuf,
pub manifests: BTreeMap<String, PathBuf>,
pub last_updated_millis: u128,
}
#[allow(dead_code)]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PluginLoadEntry {
pub namespace: String,
pub state: PluginLifecycleState,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PluginLoadDiagnostic {
pub namespace: String,
pub severity: String,
pub message: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct InstallPluginRequest {
pub manifest_text: String,
pub source: String,
pub manifest_path: Option<String>,
pub trust_level: PluginTrustLevel,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ValidatedPlugin {
pub manifest: PluginManifestV2,
pub state: PluginLifecycleState,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PluginDoctorReport {
pub installed: usize,
pub broken: Vec<String>,
pub incompatible: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PluginOriginMetadata {
pub namespace: String,
pub source: String,
pub trust_level: PluginTrustLevel,
}