starsector 1.0.1

Org mode structural parser/emitter with an emphasis on modularity and avoiding edits unrelated to changes.
Documentation
use std::error::Error;
use std::fmt::{Display, Formatter, Result};

#[derive(Debug)]
pub enum StructureError {
    IndextreeError(indextree::NodeError),
    LevelError,
}

#[cfg(feature = "headline-parser")]
#[derive(Debug, Clone)]
pub enum HeadlineError {
    NonEquivalentReparseError,
    InvalidTagsError,
    InvalidPriorityError,
    InvalidBodyError,
    InvalidLevelError,
    InvalidKeywordError,
    InvalidHeadlineError,
}

impl Display for StructureError {
    fn fmt(&self, f: &mut Formatter) -> Result {
        match *self {
            StructureError::IndextreeError(e) => e.fmt(f),
            StructureError::LevelError => f.write_str("LevelError"),
        }
    }
}

impl Error for StructureError {
    fn description(&self) -> &str {
        match self {
            StructureError::IndextreeError(e) => e.description(),
            StructureError::LevelError => "LevelError",
        }
    }
}

impl From<indextree::NodeError> for StructureError {
    fn from(e: indextree::NodeError) -> StructureError {
        StructureError::IndextreeError(e)
    }
}

#[cfg(feature = "headline-parser")]
impl Display for HeadlineError {
    fn fmt(&self, f: &mut Formatter) -> Result {
        match *self {
            HeadlineError::NonEquivalentReparseError => f.write_str("NonEquivalentReparseError"),
            HeadlineError::InvalidTagsError => f.write_str("InvalidTagsError"),
            HeadlineError::InvalidPriorityError => f.write_str("InvalidPriorityError"),
            HeadlineError::InvalidBodyError => f.write_str("InvalidBodyError"),
            HeadlineError::InvalidLevelError => f.write_str("InvalidLevelError"),
            HeadlineError::InvalidKeywordError => f.write_str("InvalidKeywordError"),
            HeadlineError::InvalidHeadlineError => f.write_str("InvalidHeadlineError"),
        }
    }
}

#[cfg(feature = "headline-parser")]
impl Error for HeadlineError {
    fn description(&self) -> &str {
        match self {
            HeadlineError::NonEquivalentReparseError => "NonEquivalentReparseError",
            HeadlineError::InvalidTagsError => "InvalidTagsError",
            HeadlineError::InvalidPriorityError => "InvalidPriorityError",
            HeadlineError::InvalidBodyError => "InvalidBodyError",
            HeadlineError::InvalidLevelError => "InvalidLevelError",
            HeadlineError::InvalidKeywordError => "InvalidKeywordError",
            HeadlineError::InvalidHeadlineError => "InvalidHeadlineError",
        }
    }
}