use serde::Serialize;
use zerolaunch_plugin_api::plugin::{PluginKind, PluginMetadata, PluginMode};
use crate::manager::PluginRuntimeState;
#[derive(Debug, Clone, Serialize)]
pub struct PluginInfo {
#[serde(rename = "pluginId")]
pub plugin_id: String,
#[serde(rename = "name")]
pub name: String,
#[serde(rename = "version")]
pub version: String,
#[serde(rename = "description")]
pub description: String,
#[serde(rename = "author")]
pub author: String,
#[serde(rename = "state")]
pub state: PluginRuntimeState,
#[serde(rename = "enabled")]
pub enabled: bool,
#[serde(rename = "kind", default)]
pub kind: PluginKind,
#[serde(rename = "priority")]
pub priority: u32,
#[serde(rename = "componentIds", default)]
pub component_ids: Vec<String>,
#[serde(rename = "hotkey", default)]
pub hotkey: Option<String>,
#[serde(rename = "icon", default)]
pub icon: Option<String>,
#[serde(rename = "mode", default)]
pub mode: PluginMode,
}
impl PluginInfo {
pub fn from_metadata(
meta: &PluginMetadata,
state: PluginRuntimeState,
component_ids: Vec<String>,
enabled: bool,
) -> Self {
Self {
plugin_id: meta.id.clone(),
name: meta.name.clone(),
version: meta.version.clone(),
description: meta.description.clone(),
author: meta.author.clone(),
state,
enabled,
kind: meta.kind,
priority: meta.priority,
component_ids,
hotkey: meta.hotkey.clone(),
icon: meta.icon.clone(),
mode: meta.mode,
}
}
}