dsl, output: error handlers
Some checks are pending
/ build (push) Waiting to run

This commit is contained in:
🪞👃🪞 2025-05-21 14:17:27 +03:00
parent a4a1066f18
commit abc87d3234
7 changed files with 25 additions and 197 deletions

View file

@ -42,7 +42,7 @@ from_dsl!(@a: Align<A>: |state, iter|if let Some(Token { value: Value::Key(key),
"align/n"|"align/s"|"align/e"|"align/w"|
"align/nw"|"align/sw"|"align/ne"|"align/se" => {
let _ = iter.next().unwrap();
let content = state.take_or_fail(&mut iter.clone(), "expected content")?;
let content = state.take_or_fail(&mut iter.clone(), ||"expected content")?;
return Ok(Some(match key {
"align/c" => Self::c(content),
"align/x" => Self::x(content),

View file

@ -28,8 +28,8 @@ impl<State: Dsl<A> + Dsl<B> + std::fmt::Debug, A, B> Namespace<State> for Bsp<A,
..
}) = words.peek() {
let base = words.clone();
let a: A = state.take_or_fail(words, "expected content 1")?;
let b: B = state.take_or_fail(words, "expected content 2")?;
let a: A = state.take_or_fail(words, ||"expected content 1")?;
let b: B = state.take_or_fail(words, ||"expected content 2")?;
return Ok(Some(match words.next() {
Some(Token { value: Value::Key("bsp/n"), .. }) => Self::n(a, b),
Some(Token { value: Value::Key("bsp/s"), .. }) => Self::s(a, b),

View file

@ -18,9 +18,9 @@ impl<A, B, T: Dsl<bool> + Dsl<A> + Dsl<B>> Namespace<T> for Either<A, B> {
let base = token.clone();
let _ = token.next().unwrap();
return Ok(Some(Self(
state.take_or_fail(token, "either: no condition")?,
state.take_or_fail(token, "either: no content 1")?,
state.take_or_fail(token, "either: no content 2")?,
state.take_or_fail(token, ||"either: no condition")?,
state.take_or_fail(token, ||"either: no content 1")?,
state.take_or_fail(token, ||"either: no content 2")?,
)))
}
Ok(None)

View file

@ -41,11 +41,11 @@ macro_rules! transform_xy {
let mut base = token.clone();
return Ok(Some(match token.next() {
Some(Token{value:Value::Key($x),..}) =>
Self::x(state.take_or_fail(token, "x: no content")?),
Self::x(state.take_or_fail(token, ||"x: no content")?),
Some(Token{value:Value::Key($y),..}) =>
Self::y(state.take_or_fail(token, "y: no content")?),
Self::y(state.take_or_fail(token, ||"y: no content")?),
Some(Token{value:Value::Key($xy),..}) =>
Self::xy(state.take_or_fail(token, "xy: no content")?),
Self::xy(state.take_or_fail(token, ||"xy: no content")?),
_ => unreachable!()
}))
}
@ -87,17 +87,17 @@ macro_rules! transform_xy_unit {
let mut base = token.clone();
Some(match token.next() {
Some(Token { value: Value::Key($x), .. }) => Self::x(
state.take_or_fail(token, "x: no unit")?,
state.take_or_fail(token, "x: no content")?,
state.take_or_fail(token, ||"x: no unit")?,
state.take_or_fail(token, ||"x: no content")?,
),
Some(Token { value: Value::Key($y), .. }) => Self::y(
state.take_or_fail(token, "y: no unit")?,
state.take_or_fail(token, "y: no content")?,
state.take_or_fail(token, ||"y: no unit")?,
state.take_or_fail(token, ||"y: no content")?,
),
Some(Token { value: Value::Key($x), .. }) => Self::xy(
state.take_or_fail(token, "xy: no unit x")?,
state.take_or_fail(token, "xy: no unit y")?,
state.take_or_fail(token, "xy: no content")?
state.take_or_fail(token, ||"xy: no unit x")?,
state.take_or_fail(token, ||"xy: no unit y")?,
state.take_or_fail(token, ||"xy: no content")?
),
_ => unreachable!(),
})

View file

@ -20,8 +20,8 @@ impl<A, T: Dsl<bool> + Dsl<A>> Namespace<T> for When<A> {
}) = token.peek() {
let base = token.clone();
return Ok(Some(Self(
state.take_or_fail(token, "cond: no condition")?,
state.take_or_fail(token, "cond: no content")?,
state.take_or_fail(token, ||"cond: no condition")?,
state.take_or_fail(token, ||"cond: no content")?,
)))
} else {
None