use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Product {
pub id: String,
pub name: String,
#[serde(default)]
pub description: Option<String>,
#[serde(default)]
pub category: Option<String>,
#[serde(default)]
pub price_cents: Option<u64>,
#[serde(default)]
pub image_url: Option<String>,
#[serde(default)]
pub available: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CatalogResponse {
pub products: Vec<Product>,
#[serde(default)]
pub total: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Order {
pub order_id: String,
pub email: String,
pub status: String,
#[serde(default)]
pub quantity: Option<u32>,
#[serde(default)]
pub amount_cents: Option<u64>,
#[serde(default)]
pub created_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct OrderCreateResponse {
pub client_secret: String,
#[serde(default)]
pub order_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LeadSubscribeResponse {
pub success: bool,
#[serde(default)]
pub message: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ContactSendResponse {
pub success: bool,
#[serde(default)]
pub message: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct McpTool {
pub name: String,
#[serde(default)]
pub description: Option<String>,
#[serde(default)]
pub input_schema: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct McpToolResult {
#[serde(default)]
pub content: Option<serde_json::Value>,
#[serde(default)]
pub is_error: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Device {
pub device_id: String,
#[serde(default)]
pub public_key: Option<String>,
#[serde(default)]
pub firmware_version: Option<String>,
#[serde(default)]
pub last_seen: Option<String>,
#[serde(default)]
pub status: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FleetStatus {
#[serde(default)]
pub total_devices: Option<u64>,
#[serde(default)]
pub online_devices: Option<u64>,
#[serde(default)]
pub pending_updates: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HealthResponse {
pub status: String,
#[serde(default)]
pub version: Option<String>,
#[serde(default)]
pub timestamp: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BrainMemory {
#[serde(default)]
pub id: Option<String>,
pub content: String,
#[serde(default)]
pub namespace: Option<String>,
#[serde(default)]
pub tags: Option<Vec<String>>,
#[serde(default)]
pub score: Option<f64>,
#[serde(default)]
pub created_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BrainSearchResponse {
pub results: Vec<BrainMemory>,
#[serde(default)]
pub total: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DocsSearchResult {
pub title: String,
#[serde(default)]
pub snippet: Option<String>,
#[serde(default)]
pub url: Option<String>,
#[serde(default)]
pub score: Option<f64>,
}