aboutsummaryrefslogtreecommitdiffstats
path: root/askama_derive/src/parser
diff options
context:
space:
mode:
Diffstat (limited to 'askama_derive/src/parser')
-rw-r--r--askama_derive/src/parser/mod.rs23
-rw-r--r--askama_derive/src/parser/tests.rs4
2 files changed, 19 insertions, 8 deletions
diff --git a/askama_derive/src/parser/mod.rs b/askama_derive/src/parser/mod.rs
index f81bcc8..0bf68ca 100644
--- a/askama_derive/src/parser/mod.rs
+++ b/askama_derive/src/parser/mod.rs
@@ -1,5 +1,5 @@
use std::cell::Cell;
-use std::str;
+use std::{fmt, str};
use nom::branch::alt;
use nom::bytes::complete::{escaped, is_not, tag, take_till};
@@ -13,7 +13,6 @@ use nom::{error_position, AsChar, IResult, InputTakeAtPosition};
pub(crate) use self::expr::Expr;
pub(crate) use self::node::{Cond, CondTest, Loop, Macro, Node, Target, When, Whitespace, Ws};
-use crate::CompileError;
mod expr;
mod node;
@@ -57,11 +56,11 @@ impl From<char> for Whitespace {
}
}
-pub(crate) fn parse<'a>(src: &'a str, syntax: &Syntax<'_>) -> Result<Vec<Node<'a>>, CompileError> {
+pub(crate) fn parse<'a>(src: &'a str, syntax: &Syntax<'_>) -> Result<Vec<Node<'a>>, ParseError> {
match Node::parse(src, &State::new(syntax)) {
Ok((left, res)) => {
if !left.is_empty() {
- Err(format!("unable to parse template:\n\n{left:?}").into())
+ Err(ParseError(format!("unable to parse template:\n\n{left:?}")))
} else {
Ok(res)
}
@@ -86,10 +85,22 @@ pub(crate) fn parse<'a>(src: &'a str, syntax: &Syntax<'_>) -> Result<Vec<Node<'a
column,
source_after,
);
- Err(msg.into())
+
+ Err(ParseError(msg))
}
- Err(nom::Err::Incomplete(_)) => Err("parsing incomplete".into()),
+ Err(nom::Err::Incomplete(_)) => Err(ParseError("parsing incomplete".into())),
+ }
+}
+
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub(crate) struct ParseError(String);
+
+impl std::error::Error for ParseError {}
+
+impl fmt::Display for ParseError {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ self.0.fmt(f)
}
}
diff --git a/askama_derive/src/parser/tests.rs b/askama_derive/src/parser/tests.rs
index 68cf14b..0e785eb 100644
--- a/askama_derive/src/parser/tests.rs
+++ b/askama_derive/src/parser/tests.rs
@@ -260,7 +260,7 @@ fn test_rust_macro() {
assert_eq!(
&*super::parse("{{a.b.c!( hello )}}", &syntax)
.unwrap_err()
- .msg,
+ .to_string(),
"problems parsing template source at row 1, column 7 near:\n\"!( hello )}}\"",
);
}
@@ -706,7 +706,7 @@ fn test_missing_space_after_kw() {
let syntax = Syntax::default();
let err = super::parse("{%leta=b%}", &syntax).unwrap_err();
assert!(matches!(
- &*err.msg,
+ &*err.to_string(),
"unable to parse template:\n\n\"{%leta=b%}\""
));
}