Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I28cf5b7b7cff8e90e123d624d97cf9656a6a6964
70 lines
1.8 KiB
Rust
70 lines
1.8 KiB
Rust
use pinakes_plugin_api::{UiPage, UiWidget};
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Debug, Serialize, utoipa::ToSchema)]
|
|
pub struct PluginResponse {
|
|
pub id: String,
|
|
pub name: String,
|
|
pub version: String,
|
|
pub author: String,
|
|
pub description: String,
|
|
pub api_version: String,
|
|
pub enabled: bool,
|
|
}
|
|
|
|
#[derive(Debug, Deserialize, utoipa::ToSchema)]
|
|
pub struct InstallPluginRequest {
|
|
pub source: String, // URL or file path
|
|
}
|
|
|
|
#[derive(Debug, Deserialize, utoipa::ToSchema)]
|
|
pub struct TogglePluginRequest {
|
|
pub enabled: bool,
|
|
}
|
|
|
|
/// A single plugin UI page entry in the list response
|
|
#[derive(Debug, Serialize, utoipa::ToSchema)]
|
|
pub struct PluginUiPageEntry {
|
|
/// Plugin ID that provides this page
|
|
pub plugin_id: String,
|
|
/// Full page definition
|
|
#[schema(value_type = Object)]
|
|
pub page: UiPage,
|
|
/// Endpoint paths this plugin is allowed to fetch (empty means no
|
|
/// restriction)
|
|
pub allowed_endpoints: Vec<String>,
|
|
}
|
|
|
|
/// A single plugin UI widget entry in the list response
|
|
#[derive(Debug, Serialize, utoipa::ToSchema)]
|
|
pub struct PluginUiWidgetEntry {
|
|
/// Plugin ID that provides this widget
|
|
pub plugin_id: String,
|
|
/// Full widget definition
|
|
#[schema(value_type = Object)]
|
|
pub widget: UiWidget,
|
|
}
|
|
|
|
/// Request body for emitting a plugin event
|
|
#[derive(Debug, Deserialize, utoipa::ToSchema)]
|
|
pub struct PluginEventRequest {
|
|
pub event: String,
|
|
#[serde(default)]
|
|
#[schema(value_type = Object)]
|
|
pub payload: serde_json::Value,
|
|
}
|
|
|
|
impl PluginResponse {
|
|
#[must_use]
|
|
pub fn new(meta: pinakes_plugin_api::PluginMetadata, enabled: bool) -> Self {
|
|
Self {
|
|
id: meta.id,
|
|
name: meta.name,
|
|
version: meta.version,
|
|
author: meta.author,
|
|
description: meta.description,
|
|
api_version: meta.api_version,
|
|
enabled,
|
|
}
|
|
}
|
|
}
|