use serde::{Deserialize, Serialize};
#[derive(Deserialize, Default)]
pub struct LektonConfig {
#[serde(default)]
pub id: Option<String>,
pub url: Option<String>,
#[serde(default)]
pub default_access_level: Option<String>,
#[serde(default)]
pub default_service_owner: Option<String>,
#[serde(default)]
pub slug_prefix: Option<String>,
#[serde(default)]
pub archive_missing: Option<bool>,
#[serde(default)]
pub max_attachment_size_mb: Option<u32>,
#[serde(default)]
pub prompts_dir: Option<String>,
#[serde(default)]
pub prompt_slug_prefix: Option<String>,
#[serde(default)]
pub schemas_dir: Option<String>,
#[serde(default)]
pub schema_name_prefix: Option<String>,
#[serde(default)]
pub archive_missing_schemas: Option<bool>,
}
#[derive(Deserialize, Default)]
pub struct FrontMatter {
pub slug: Option<String>,
pub title: Option<String>,
pub summary: Option<String>,
#[serde(alias = "access-level", alias = "accessLevel")]
pub access_level: Option<String>,
#[serde(alias = "service-owner", alias = "serviceOwner")]
pub service_owner: Option<String>,
#[serde(default)]
pub tags: Option<Vec<String>>,
#[serde(alias = "parent-slug", alias = "parentSlug")]
pub parent_slug: Option<String>,
pub order: Option<i32>,
#[serde(alias = "is-hidden", alias = "isHidden")]
pub is_hidden: Option<bool>,
#[serde(
rename = "lekton-import",
alias = "lektonImport",
alias = "lekton_import",
default
)]
pub lekton_import: bool,
}
#[derive(Deserialize, Default, Clone)]
pub struct PromptFile {
pub slug: Option<String>,
pub name: Option<String>,
pub description: Option<String>,
pub access_level: Option<String>,
pub status: Option<String>,
pub owner: Option<String>,
#[serde(default)]
pub tags: Option<Vec<String>>,
#[serde(default)]
pub variables: Option<Vec<PromptVariable>>,
#[serde(default)]
pub publish_to_mcp: Option<bool>,
#[serde(default)]
pub default_primary: Option<bool>,
#[serde(default)]
pub context_cost: Option<String>,
pub prompt_body: Option<String>,
#[serde(rename = "lekton-import", default)]
pub lekton_import: Option<bool>,
}
#[derive(Deserialize, Default)]
pub struct SchemaManifestFile {
pub name: Option<String>,
pub schema_type: String,
#[serde(default)]
pub service_owner: Option<String>,
#[serde(default)]
pub default_access_level: Option<String>,
#[serde(default)]
pub tags: Option<Vec<String>>,
#[serde(default)]
pub versions: Vec<SchemaVersionFile>,
}
#[derive(Deserialize, Default)]
pub struct SchemaVersionFile {
pub file: String,
pub version: String,
#[serde(default = "default_status")]
pub status: String,
#[serde(default)]
pub access_level: Option<String>,
}
#[derive(Debug, Deserialize, Serialize, Clone, Default)]
pub struct PromptVariable {
pub name: String,
pub description: String,
#[serde(default = "default_true")]
pub required: bool,
}
fn default_true() -> bool {
true
}
fn default_status() -> String {
"stable".to_string()
}