mod file_info; mod page; mod section; mod ser; pub use self::file_info::FileInfo; pub use self::page::Page; pub use self::section::Section; pub use self::ser::{SerializingPage, SerializingSection}; use rendering::Heading; pub fn has_anchor(headings: &[Heading], anchor: &str) -> bool { for heading in headings { if heading.id == anchor { return true; } if has_anchor(&heading.children, anchor) { return true; } } false } #[cfg(test)] mod tests { use super::*; #[test] fn can_find_anchor_at_root() { let input = vec![ Heading { level: 1, id: "1".to_string(), permalink: String::new(), title: String::new(), children: vec![], }, Heading { level: 2, id: "1-1".to_string(), permalink: String::new(), title: String::new(), children: vec![], }, Heading { level: 3, id: "1-1-1".to_string(), permalink: String::new(), title: String::new(), children: vec![], }, Heading { level: 2, id: "1-2".to_string(), permalink: String::new(), title: String::new(), children: vec![], }, ]; assert!(has_anchor(&input, "1-2")); } #[test] fn can_find_anchor_in_children() { let input = vec![Heading { level: 1, id: "1".to_string(), permalink: String::new(), title: String::new(), children: vec![ Heading { level: 2, id: "1-1".to_string(), permalink: String::new(), title: String::new(), children: vec![], }, Heading { level: 3, id: "1-1-1".to_string(), permalink: String::new(), title: String::new(), children: vec![], }, Heading { level: 2, id: "1-2".to_string(), permalink: String::new(), title: String::new(), children: vec![], }, ], }]; assert!(has_anchor(&input, "1-2")); } }