use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Skill {
pub id: String,
pub name: String,
pub description: String,
pub category: String,
pub version: String,
pub author: String,
pub metadata: std::collections::HashMap<String, serde_json::Value>, }
impl Skill {
pub fn new(
id: impl Into<String>,
name: impl Into<String>,
description: impl Into<String>,
category: impl Into<String>,
version: impl Into<String>,
author: impl Into<String>,
) -> Self {
Self {
id: id.into(),
name: name.into(),
description: description.into(),
category: category.into(),
version: version.into(),
author: author.into(),
metadata: std::collections::HashMap::new(),
}
}
pub fn with_metadata(mut self, key: impl Into<String>, value: serde_json::Value) -> Self {
self.metadata.insert(key.into(), value);
self
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SkillToolBinding {
pub skill_id: String,
pub tool_id: String,
pub binding_type: BindingType,
pub metadata: std::collections::HashMap<String, serde_json::Value>,
}
impl SkillToolBinding {
pub fn new(
skill_id: impl Into<String>,
tool_id: impl Into<String>,
binding_type: BindingType,
) -> Self {
Self {
skill_id: skill_id.into(),
tool_id: tool_id.into(),
binding_type,
metadata: std::collections::HashMap::new(),
}
}
pub fn with_metadata(mut self, key: impl Into<String>, value: serde_json::Value) -> Self {
self.metadata.insert(key.into(), value);
self
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum BindingType {
Required,
Optional,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ToolAccessType {
Public,
Private,
}