use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StructureNode {
pub title: String,
pub node_id: String,
pub start_index: usize,
pub end_index: usize,
#[serde(skip_serializing_if = "Option::is_none")]
pub summary: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub nodes: Vec<StructureNode>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentStructure {
pub doc_name: String,
pub structure: Vec<StructureNode>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_structure_node_serialization() {
let node = StructureNode {
title: "Introduction".to_string(),
node_id: "0001".to_string(),
start_index: 1,
end_index: 10,
summary: Some("A brief intro".to_string()),
nodes: vec![],
};
let json = serde_json::to_string(&node).unwrap();
assert!(json.contains("Introduction"));
}
#[test]
fn test_document_structure() {
let doc = DocumentStructure {
doc_name: "test.md".to_string(),
structure: vec![],
};
assert_eq!(doc.doc_name, "test.md");
}
}