diff --git a/output/src/ops_dsl.rs b/output/src/ops_dsl.rs index 196f693..5d131bb 100644 --- a/output/src/ops_dsl.rs +++ b/output/src/ops_dsl.rs @@ -3,7 +3,7 @@ use Value::*; impl Dsl for When where S: Eval + Eval { fn try_provide (state: &S, source: Ast) -> Perhaps { - if let Exp(_, exp) = source.0 && let Some(Ast(Key(id))) = exp.peek() && *id == *"when" { + if let Exp(_, mut exp) = source.0 && let Some(Ast(Key(id))) = exp.peek() && *id == *"when" { let _ = exp.next(); return Ok(Some(Self( state.eval(exp.next().unwrap(), ||"when: expected condition")?, @@ -16,7 +16,7 @@ impl Dsl for When where S: Eval + Eval { impl Dsl for Either where S: Eval + Eval + Eval { fn try_provide (state: &S, source: Ast) -> Perhaps { - if let Exp(_, exp) = source.0 && let Some(Ast(Key(id))) = exp.peek() && *id == *"either" { + if let Exp(_, mut exp) = source.0 && let Some(Ast(Key(id))) = exp.peek() && *id == *"either" { let _ = exp.next(); return Ok(Some(Self( state.eval(exp.next().unwrap(), ||"either: expected condition")?, @@ -32,7 +32,7 @@ impl Dsl for Align where S: Eval, A> { fn try_provide (state: &S, source: Ast) -> Perhaps { if let Exp(_, source) = source.0 { let mut rest = source.clone(); - return Ok(Some(match rest.next().and_then(|x|x.key()) { + return Ok(Some(match rest.next().as_ref().and_then(|x|x.key()) { Some("align/c") => Self::c(state.eval(rest.next(), ||"align/c: expected content")?), Some("align/x") => Self::x(state.eval(rest.next(), ||"align/x: expected content")?), Some("align/y") => Self::y(state.eval(rest.next(), ||"align/y: expected content")?), @@ -55,7 +55,7 @@ impl Dsl for Bsp where S: Eval, A> + Eval Perhaps { if let Exp(_, exp) = source.0 { let mut rest = exp.clone(); - return Ok(Some(match rest.next().and_then(|x|x.key()) { + return Ok(Some(match rest.next().as_ref().and_then(|x|x.key()) { Some("bsp/n") => Self::n( state.eval(rest.next(), ||"bsp/n: expected content 1")?, state.eval(rest.next(), ||"bsp/n: expected content 2")?,