use serde::{Deserialize, Serialize};
#[derive(Debug, Clone)]
pub struct Skill {
pub name: String,
pub description: String,
pub path: String,
pub source: String,
pub metadata: SkillMetadata,
pub content: String,
}
#[derive(Debug, Clone)]
pub struct SkillInfo {
pub name: String,
pub path: String,
pub source: String,
}
fn default_required() -> bool {
true
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct EnvSpec {
pub name: String,
pub description: String,
#[serde(default = "default_required")]
pub required: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct SkillMetadata {
pub name: String,
pub description: String,
pub version: Option<String>,
pub homepage: Option<String>,
pub author: Option<String>,
pub license: Option<String>,
#[serde(default)]
pub tags: Vec<String>,
#[serde(default)]
pub depends: Vec<String>,
#[serde(default)]
pub conflicts: Vec<String>,
#[serde(default)]
pub env_needed: Vec<EnvSpec>,
pub metadata: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ZeptoMetadata {
pub emoji: Option<String>,
pub requires: SkillRequirements,
pub install: Vec<InstallOption>,
pub always: bool,
pub os: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct SkillRequirements {
pub bins: Vec<String>,
#[serde(default, alias = "anyBins")]
pub any_bins: Vec<String>,
pub env: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InstallOption {
pub id: String,
pub kind: String,
pub formula: Option<String>,
pub package: Option<String>,
#[serde(default)]
pub bins: Vec<String>,
pub label: String,
}