use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
pub use objectiveai_sdk::cli::command::tools::get::Exec;
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "filesystem.tools.CliZipArch")]
pub struct CliZipArch {
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub x86_64: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub aarch64: Option<String>,
}
impl CliZipArch {
pub fn is_empty(&self) -> bool {
self.x86_64.is_none() && self.aarch64.is_none()
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "filesystem.tools.CliZip")]
pub struct CliZip {
#[serde(default, skip_serializing_if = "CliZipArch::is_empty")]
pub windows: CliZipArch,
#[serde(default, skip_serializing_if = "CliZipArch::is_empty")]
pub linux: CliZipArch,
#[serde(default, skip_serializing_if = "CliZipArch::is_empty")]
pub macos: CliZipArch,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "filesystem.tools.Manifest")]
pub struct Manifest {
pub owner: String,
pub name: String,
pub version: String,
pub description: String,
pub exec: Exec,
pub cli_zip: CliZip,
}
impl Manifest {
pub fn validate(&self) -> Result<(), &'static str> {
Ok(())
}
}
impl From<Manifest> for objectiveai_sdk::cli::command::tools::get::ResponseManifest {
fn from(m: Manifest) -> Self {
Self {
owner: m.owner,
name: m.name,
version: m.version,
description: m.description,
exec: m.exec,
}
}
}