use crate::Value;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use strum_macros::{AsRefStr, EnumIter, EnumString, IntoStaticStr};
#[derive(
PartialEq,
Eq,
Clone,
Debug,
Serialize,
Deserialize,
EnumString,
EnumIter,
AsRefStr,
IntoStaticStr,
Default,
)]
pub enum PluginLanguage {
#[serde(rename = "rust")]
#[default]
Rust,
#[serde(rename = "golang")]
Golang,
#[serde(rename = "python")]
Python,
#[serde(rename = "zig")]
Zig,
}
impl PluginLanguage {
pub fn string_to_lang(lang: &str) -> Self {
if lang == "rust" {
Self::Rust
} else if lang == "golang" {
Self::Golang
} else if lang == "zig" {
Self::Zig
} else if lang == "python" {
Self::Python
} else {
Self::Rust
}
}
}
#[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize, EnumString, EnumIter, AsRefStr)]
pub enum PluginCompiler {
#[serde(rename = "wasm")]
Wasm,
#[serde(rename = "wasi")]
Wasi,
#[serde(rename = "wasix")]
Wasix,
#[serde(rename = "tinygo")]
TinyGo,
}
#[derive(PartialEq, Eq, Serialize, Deserialize, Clone, Debug, Default)]
pub struct WakfloWorkspace {
pub plugin: WakfloPlugin,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PluginWorkspaceMetadata {
pub properties: HashMap<String, serde_json::Value>,
pub compiler: PluginCompiler,
pub name: String,
pub icon: String,
pub category: String,
pub language: PluginLanguage,
pub version: String,
pub description: String,
}
#[derive(PartialEq, Eq, Serialize, Deserialize, Clone, Debug, Default)]
pub struct WakfloPlugin {
pub name: String,
pub icon: String,
pub category: String,
pub language: PluginLanguage,
pub version: String,
pub description: String,
pub documentation: Option<String>,
pub properties: Option<HashMap<String, Value>>,
}