- 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"));
- }
- }
|