From cac3bbd732014bee392ac8a098fb371c2c650325 Mon Sep 17 00:00:00 2001 From: Per Lindgren <per.lindgren@ltu.se> Date: Sun, 13 Sep 2020 13:32:07 +0200 Subject: [PATCH] fallible iterator --- src/ast/main.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/ast/main.rs b/src/ast/main.rs index 4b310e9..825a7ff 100644 --- a/src/ast/main.rs +++ b/src/ast/main.rs @@ -31,17 +31,18 @@ fn parse_num_or_id() { type Error = String; fn type_check(stmts: &Stmts) -> Result<(), Error> { - for i in stmts { - match i { - Stmt::Let(_, _) => { - println!("let"); - } - Stmt::If(_, _, __) => { - println!("if"); - } + let r: Result<(), Error> = stmts.iter().try_for_each(|i| match i { + Stmt::Let(_, _) => { + println!("let"); + Ok(()) } - } - Ok(()) + Stmt::If(_, _, __) => { + println!("if"); + Err("error in if".to_string())? + } + }); + println!("here we can do something before returning"); + r } #[test] @@ -49,6 +50,7 @@ fn test_stmts() { let stmts = vec![ Stmt::Let("a".to_string(), NumOrId::Num(1)), Stmt::Let("b".to_string(), NumOrId::Num(2)), + Stmt::If("b".to_string(), Stmts::new(), None), Stmt::Let("c".to_string(), NumOrId::Num(3)), ]; type_check(&stmts).unwrap(); -- GitLab