use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FileRecord {
pub path: String,
pub absolute_path: String,
pub size: u64,
pub modified_at: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentSummary {
pub path: String,
pub title: Option<String>,
#[serde(rename = "type")]
pub concept_type: Option<String>,
pub description: Option<String>,
pub tags: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentDetail {
pub path: String,
pub metadata: DocumentMetadata,
pub headings: Vec<crate::model::document::content::HeadingInfo>,
pub body: Option<String>,
pub truncated: bool,
pub errors: Vec<crate::model::document::frontmatter::ParseError>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content_hash: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub links: Option<Vec<crate::model::document::content::LinkInfo>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub backlinks: Option<Vec<BacklinkInfo>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BacklinkInfo {
pub source_path: String,
pub target_anchor: Option<String>,
pub exists_in_repository: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentMetadata {
pub title: Option<String>,
#[serde(rename = "type")]
pub concept_type: Option<String>,
pub description: Option<String>,
pub tags: Vec<String>,
pub custom: BTreeMap<String, serde_json::Value>,
pub file_size: u64,
pub modified_at: i64,
pub parse_status: String,
}