lua and frork errors
change ztkqvmrmqlmxlspmuoysqowusrtzotro
commit 0967570574e524d5d6c5d25e8d67148bd8aab171
author Alpha Chen <alpha@kejadlen.dev>
date
parent uuryzzqp
diff --git a/src/main.rs b/src/main.rs
index bc4ccfa..84d0693 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -44,7 +44,16 @@ pub enum FrorkError {
 
 impl From<LuaError> for FrorkError {
     fn from(err: LuaError) -> Self {
-        FrorkError::Lua(err.to_string())
+        match err {
+            LuaError::CallbackError { cause, .. } => {
+                if let Some(frork_err) = cause.downcast_ref::<FrorkError>() {
+                    frork_err.clone()
+                } else {
+                    FrorkError::Lua(format!("Callback error: {}", cause))
+                }
+            }
+            _ => FrorkError::Lua(err.to_string()),
+        }
     }
 }
 
@@ -228,9 +237,9 @@ impl Frork {
         }
     }
 
-    fn check(&self, args: LuaMultiValue) -> Result<()> {
+    fn check(&self, args: LuaMultiValue) -> LuaResult<()> {
         if args.is_empty() {
-            return Err(FrorkError::NoOperation.into());
+            return Err(LuaError::external(FrorkError::NoOperation));
         }
 
         let mut args_iter = args.into_iter();
@@ -238,7 +247,9 @@ impl Frork {
             .next()
             .and_then(|v| v.to_string().ok())
             .ok_or_else(|| {
-                FrorkError::InvalidArguments("First argument must be assertion type".to_string())
+                LuaError::external(FrorkError::InvalidArguments(
+                    "First argument must be assertion type".to_string(),
+                ))
             })?;
 
         let assertion_args: LuaMultiValue = args_iter.collect();
@@ -246,8 +257,9 @@ impl Frork {
         let assertion = self
             .registry
             .borrow()
-            .create(&assertion_type, assertion_args)?;
-        let status = assertion.status()?;
+            .create(&assertion_type, assertion_args)
+            .map_err(LuaError::external)?;
+        let status = assertion.status().map_err(LuaError::external)?;
         match status {
             Status::Ok => println!("ok: {}", assertion.display()),
             Status::Missing => println!("missing: {}", assertion.display()),
@@ -255,8 +267,8 @@ impl Frork {
         Ok(())
     }
 
-    fn register(&self, name: &str, table: LuaTable) -> Result<()> {
-        let status_fn: LuaFunction = table.get("status").map_err(FrorkError::from)?;
+    fn register(&self, name: &str, table: LuaTable) -> LuaResult<()> {
+        let status_fn: LuaFunction = table.get("status")?;
 
         let name_clone = name.to_string();
         self.registry.borrow_mut().register(name, move |args| {
@@ -276,37 +288,15 @@ impl Frork {
 
         let frork_clone = frork.clone();
         let check_fn = lua
-            .create_function(move |_lua, args: LuaMultiValue| {
-                frork_clone.check(args).map_err(LuaError::external)
-            })
-            .map_err(|e| match e {
-                LuaError::CallbackError { cause, .. } => {
-                    if let Some(frork_err) = cause.downcast_ref::<FrorkError>() {
-                        frork_err.clone().into()
-                    } else {
-                        eyre!("Callback error: {}", cause)
-                    }
-                }
-                _ => FrorkError::Lua(e.to_string()).into(),
-            })?;
+            .create_function(move |_lua, args: LuaMultiValue| frork_clone.check(args))
+            .map_err(FrorkError::from)?;
 
         let frork_clone = frork.clone();
         let register_fn = lua
             .create_function(move |_lua, (name, table): (String, LuaTable)| {
-                frork_clone
-                    .register(&name, table)
-                    .map_err(LuaError::external)
+                frork_clone.register(&name, table)
             })
-            .map_err(|e| match e {
-                LuaError::CallbackError { cause, .. } => {
-                    if let Some(frork_err) = cause.downcast_ref::<FrorkError>() {
-                        frork_err.clone().into()
-                    } else {
-                        eyre!("Callback error: {}", cause)
-                    }
-                }
-                _ => FrorkError::Lua(e.to_string()).into(),
-            })?;
+            .map_err(FrorkError::from)?;
 
         frork_table.set("ok", check_fn).map_err(FrorkError::from)?;
         frork_table