mdbook-journal 0.4.0

journal plugin for mdBook
Documentation
use super::*;

pub trait SectionNumberExtension: Sized {
    fn root(&self) -> Option<Self>;
    fn root_value(&self) -> Option<u32>;
    fn advance_level(&self) -> Self;
    fn increment(&mut self);
}

impl SectionNumberExtension for SectionNumber {
    fn root(&self) -> Option<Self> {
        self.root_value().map(|val| Self::new(vec![val]))
    }

    fn root_value(&self) -> Option<u32> {
        if self.is_empty() {
            None
        } else {
            Some(self[0])
        }
    }

    fn advance_level(&self) -> Self {
        if self.is_empty() {
            Self::new(vec![0])
        } else {
            let mut data = self.clone();
            data.push(0);
            data
        }
    }

    fn increment(&mut self) {
        if self.is_empty() {
            self.push(1);
        } else {
            *self.last_mut().unwrap() += 1;
        }
    }
}