use nom::error::VerboseError; use nom::IResult; use std::cell::RefCell; use std::rc::Rc; #[derive(Clone)] pub struct NomContext { pub fail_matcher: Rc>, /// You can't have nested bolds in org-mode pub can_match_bold: bool, pub can_match_link: bool, } impl NomContext where F: for<'a> FnMut(&'a str) -> IResult<&'a str, &'a str, VerboseError<&'a str>>, { pub fn new(fail_matcher: F) -> Self { NomContext { fail_matcher: Rc::new(RefCell::new(fail_matcher)), can_match_bold: true, can_match_link: true, } } pub fn with_no_bold(&self) -> NomContext { NomContext { fail_matcher: self.fail_matcher.clone(), can_match_bold: false, can_match_link: self.can_match_link, } } }