use super::prelude::*;
#[inline]
pub fn collect_text<'p, 'r, 't>(
parser: &'p mut Parser<'r, 't>,
rule: Rule,
close_conditions: &[ParseCondition],
invalid_conditions: &[ParseCondition],
error_kind: Option<ParseErrorKind>,
) -> Result<&'t str, ParseError>
where
'r: 't,
{
collect_text_keep(
parser,
rule,
close_conditions,
invalid_conditions,
error_kind,
)
.map(|(slice, _)| slice)
}
pub fn collect_text_keep<'p, 'r, 't>(
parser: &'p mut Parser<'r, 't>,
rule: Rule,
close_conditions: &[ParseCondition],
invalid_conditions: &[ParseCondition],
error_kind: Option<ParseErrorKind>,
) -> Result<(&'t str, &'r ExtractedToken<'t>), ParseError>
where
'r: 't,
{
debug!("Trying to consume tokens to merge into a single string");
let (start, mut end) = (parser.current(), None);
let (last, errors, _) = collect(
parser,
rule,
close_conditions,
invalid_conditions,
error_kind,
|parser| {
trace!("Ingesting token in string span");
end = Some(parser.current());
ok!(true; ())
},
)?
.into();
assert!(
errors.is_empty(),
"Exceptions were returned during text token collection",
);
let slice = match (start, end) {
(start, Some(end)) => parser.full_text().slice(start, end),
(_, None) => "",
};
Ok((slice, last))
}