aboutsummaryrefslogtreecommitdiffstats
path: root/askama_parser/src/lib.rs
diff options
context:
space:
mode:
authorLibravatar Dirkjan Ochtman <dirkjan@ochtman.nl>2023-07-02 11:30:02 +0200
committerLibravatar Dirkjan Ochtman <dirkjan@ochtman.nl>2023-07-31 10:27:15 +0200
commitdcfa5e1c694bdcb237801eb09398d70f98a39a97 (patch)
tree0c311e1d857b90f61b638f7c8782c9b4842e3364 /askama_parser/src/lib.rs
parentfaf2e34cbf2e2049f2f473005e3c28dcc0d0a949 (diff)
downloadaskama-dcfa5e1c694bdcb237801eb09398d70f98a39a97.tar.gz
askama-dcfa5e1c694bdcb237801eb09398d70f98a39a97.tar.bz2
askama-dcfa5e1c694bdcb237801eb09398d70f98a39a97.zip
parser: simplify top-level parser match
Diffstat (limited to '')
-rw-r--r--askama_parser/src/lib.rs53
1 files changed, 24 insertions, 29 deletions
diff --git a/askama_parser/src/lib.rs b/askama_parser/src/lib.rs
index 9559ee0..ab3eb83 100644
--- a/askama_parser/src/lib.rs
+++ b/askama_parser/src/lib.rs
@@ -63,40 +63,35 @@ pub struct Ast<'a> {
impl<'a> Ast<'a> {
pub fn from_str(src: &'a str, syntax: &Syntax<'_>) -> Result<Self, ParseError> {
- match Node::parse(src, &State::new(syntax)) {
- Ok((left, nodes)) => {
- if !left.is_empty() {
- Err(ParseError(format!("unable to parse template:\n\n{left:?}")))
- } else {
- Ok(Self { nodes })
- }
- }
-
- Err(nom::Err::Error(err)) | Err(nom::Err::Failure(err)) => {
- let nom::error::Error { input, .. } = err;
- let offset = src.len() - input.len();
- let (source_before, source_after) = src.split_at(offset);
+ let err = match Node::parse(src, &State::new(syntax)) {
+ Ok((left, nodes)) => match left.is_empty() {
+ true => return Ok(Self { nodes }),
+ false => return Err(ParseError(format!("unable to parse template:\n\n{left:?}"))),
+ },
+ Err(nom::Err::Error(err)) | Err(nom::Err::Failure(err)) => err,
+ Err(nom::Err::Incomplete(_)) => return Err(ParseError("parsing incomplete".into())),
+ };
- let source_after = match source_after.char_indices().enumerate().take(41).last() {
- Some((40, (i, _))) => format!("{:?}...", &source_after[..i]),
- _ => format!("{source_after:?}"),
- };
+ let nom::error::Error { input, .. } = err;
+ let offset = src.len() - input.len();
+ let (source_before, source_after) = src.split_at(offset);
- let (row, last_line) = source_before.lines().enumerate().last().unwrap();
- let column = last_line.chars().count();
+ let source_after = match source_after.char_indices().enumerate().take(41).last() {
+ Some((40, (i, _))) => format!("{:?}...", &source_after[..i]),
+ _ => format!("{source_after:?}"),
+ };
- let msg = format!(
- "problems parsing template source at row {}, column {} near:\n{}",
- row + 1,
- column,
- source_after,
- );
+ let (row, last_line) = source_before.lines().enumerate().last().unwrap();
+ let column = last_line.chars().count();
- Err(ParseError(msg))
- }
+ let msg = format!(
+ "problems parsing template source at row {}, column {} near:\n{}",
+ row + 1,
+ column,
+ source_after,
+ );
- Err(nom::Err::Incomplete(_)) => Err(ParseError("parsing incomplete".into())),
- }
+ Err(ParseError(msg))
}
}