1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
mod closed_heading;
mod comment;
mod open_heading;

use crate::{Result, Span};
use closed_heading::closed_heading;
use comment::comment;
use nom::branch::alt;
use open_heading::open_heading;

#[derive(Debug, PartialEq)]
pub enum SinglelineBlock {
  OpenHeading(Vec<Span>, HeadingLevel),
  ClosedHeading(Vec<Span>, HeadingLevel),
  Comment(String),
}

#[derive(Debug, PartialEq)]
pub enum HeadingLevel {
  One,
  Two,
  Three,
  Four,
  Five,
  Six,
}

impl From<usize> for HeadingLevel {
  fn from(source: usize) -> HeadingLevel {
    use HeadingLevel::*;

    match source {
      1 => One,
      2 => Two,
      3 => Three,
      4 => Four,
      5 => Five,
      6 => Six,
      _ => std::unreachable!(),
    }
  }
}

pub(crate) fn singleline_block(input: &str) -> Result<SinglelineBlock> {
  alt((open_heading, closed_heading, comment))(input)
}