use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PluginMetadata {
pub id: String,
pub name: String,
pub version: String,
pub description: String,
pub author: String,
pub abi_version: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WorkflowStepTypeDefinition {
pub type_id: String,
pub display_name: String,
pub description: String,
pub icon: String,
pub category: String,
pub config_schema: serde_json::Value,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct SubscriptionToken(pub u64);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum LogLevel {
Trace,
Debug,
Info,
Warn,
Error,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Notification {
pub title: String,
pub message: String,
pub kind: NotificationKind,
#[serde(default)]
pub duration_ms: Option<u64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum NotificationKind {
Info,
Success,
Warning,
Error,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum PluginState {
Inactive,
Loading,
Active,
Error,
Unloading,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PluginRecord {
pub id: String,
pub name: String,
pub version: String,
pub capability_levels: Vec<u8>,
pub manifest: serde_json::Value,
pub enabled: bool,
pub state: PluginState,
pub error_message: Option<String>,
pub install_date: String,
pub update_date: Option<String>,
pub install_source: String,
pub permissions_granted: Vec<String>,
pub plugin_dir: String,
}