use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum DocumentKind {
KnowledgeCard,
WikiPage,
ArchitectureOverview,
ProjectOverview,
TableOfContents,
ApiReference,
DatabaseSchema,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WikiDocument {
pub title: String,
pub kind: DocumentKind,
pub content: String,
pub language: String,
pub module_path: Vec<String>,
pub references: Vec<Reference>,
pub last_updated: String,
pub based_on_commit: Option<String>,
pub fingerprint: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Reference {
pub target_title: String,
pub target_path: String,
pub relation: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KnowledgeCard {
pub module_name: String,
pub module_type: String,
pub summary: String,
pub key_entities: Vec<EntitySummary>,
pub dependencies: Vec<String>,
pub dependents: Vec<String>,
pub design_patterns: Vec<String>,
pub todo_notes: Vec<String>,
#[serde(default)]
pub related_files: Vec<String>,
#[serde(default)]
pub coding_spec: Option<String>,
#[serde(default)]
pub tech_stack: Vec<String>,
#[serde(default)]
pub architecture: Option<String>,
#[serde(default)]
pub pending_manual_edits: Vec<String>,
#[serde(default)]
pub features: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EntitySummary {
pub name: String,
pub kind: String,
pub visibility: String,
pub doc: Option<String>,
#[serde(default)]
pub source: Option<String>,
}