37 lines
1.3 KiB
Rust
37 lines
1.3 KiB
Rust
use nom::{bytes::complete::take_while_m_n, character::complete::space0, IResult};
|
|
use std::usize;
|
|
|
|
use crate::elements::Element;
|
|
use crate::parsers::eol;
|
|
|
|
pub struct Rule;
|
|
|
|
impl Rule {
|
|
#[inline]
|
|
pub(crate) fn parse(input: &str) -> IResult<&str, Element<'_>> {
|
|
let (input, _) = space0(input)?;
|
|
let (input, _) = take_while_m_n(5, usize::MAX, |c| c == '-')(input)?;
|
|
let (input, _) = eol(input)?;
|
|
Ok((input, Element::Rule))
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn parse() {
|
|
assert_eq!(Rule::parse("-----"), Ok(("", Element::Rule)));
|
|
assert_eq!(Rule::parse("--------"), Ok(("", Element::Rule)));
|
|
assert_eq!(Rule::parse(" -----"), Ok(("", Element::Rule)));
|
|
assert_eq!(Rule::parse("\t\t-----"), Ok(("", Element::Rule)));
|
|
assert_eq!(Rule::parse("\t\t-----\n"), Ok(("", Element::Rule)));
|
|
assert_eq!(Rule::parse("\t\t----- \n"), Ok(("", Element::Rule)));
|
|
assert!(Rule::parse("").is_err());
|
|
assert!(Rule::parse("----").is_err());
|
|
assert!(Rule::parse(" ----").is_err());
|
|
assert!(Rule::parse(" None----").is_err());
|
|
assert!(Rule::parse("None ----").is_err());
|
|
assert!(Rule::parse("None------").is_err());
|
|
assert!(Rule::parse("----None----").is_err());
|
|
assert!(Rule::parse("\t\t----").is_err());
|
|
assert!(Rule::parse("------None").is_err());
|
|
assert!(Rule::parse("----- None").is_err());
|
|
}
|