Skip to content

Commit 3c9e85a

Browse files
Improve Level API a bit
1 parent 1f1cff0 commit 3c9e85a

File tree

2 files changed

+12
-21
lines changed

2 files changed

+12
-21
lines changed

rinja_parser/src/lib.rs

+10-11
Original file line numberDiff line numberDiff line change
@@ -635,14 +635,17 @@ impl<'a> State<'a> {
635635
}
636636
}
637637

638-
fn nest<'b>(&self, i: &'b str) -> ParseResult<'b, ()> {
639-
let (_, level) = self.level.get().nest(i)?;
638+
fn nest<'b, T, F: FnOnce(&'b str) -> ParseResult<'b, T>>(
639+
&self,
640+
i: &'b str,
641+
mut callback: F,
642+
) -> ParseResult<'b, T> {
643+
let prev_level = self.level.get();
644+
let (_, level) = prev_level.nest(i)?;
640645
self.level.set(level);
641-
Ok((i, ()))
642-
}
643-
644-
fn leave(&self) {
645-
self.level.set(self.level.get().leave());
646+
let ret = callback(i);
647+
self.level.set(prev_level);
648+
ret
646649
}
647650

648651
fn tag_block_start<'i>(&self, i: &'i str) -> ParseResult<'i> {
@@ -720,10 +723,6 @@ impl Level {
720723
Ok((i, Level(self.0 + 1)))
721724
}
722725

723-
fn leave(&self) -> Self {
724-
Level(self.0 - 1)
725-
}
726-
727726
const MAX_DEPTH: u8 = 128;
728727
}
729728

rinja_parser/src/node.rs

+2-10
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,7 @@ impl<'a> Node<'a> {
9090
}
9191
};
9292

93-
let (i, _) = s.nest(j)?;
94-
let result = func(i, s);
95-
s.leave();
96-
let (i, node) = result?;
93+
let (i, node) = s.nest(j, |i| func(i, s))?;
9794

9895
let (i, closed) = cut(alt((
9996
value(true, |i| s.tag_block_end(i)),
@@ -197,12 +194,7 @@ impl<'a> Target<'a> {
197194
/// Parses multiple targets with `or` separating them
198195
pub(super) fn parse(i: &'a str, s: &State<'_>) -> ParseResult<'a, Self> {
199196
map(
200-
separated_list1(ws(tag("or")), |i| {
201-
s.nest(i)?;
202-
let ret = Self::parse_one(i, s)?;
203-
s.leave();
204-
Ok(ret)
205-
}),
197+
separated_list1(ws(tag("or")), |i| s.nest(i, |i| Self::parse_one(i, s))),
206198
|mut opts| match opts.len() {
207199
1 => opts.pop().unwrap(),
208200
_ => Self::OrChain(opts),

0 commit comments

Comments
 (0)