From c6d35dbd049a77800aac53f419729aff75b3ca5c Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Thu, 25 Jul 2024 02:37:38 +0200 Subject: use lua prelude --- src/sheet/mod.rs | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/sheet/mod.rs b/src/sheet/mod.rs index 22b73fe..18ccee0 100644 --- a/src/sheet/mod.rs +++ b/src/sheet/mod.rs @@ -1,7 +1,10 @@ -use std::{sync::{Arc, Mutex, RwLock}, thread::JoinHandle}; +use std::{ + sync::{Arc, Mutex, RwLock}, + thread::JoinHandle, +}; use cell::{Cell, CellRef}; -use mlua::{Function, IntoLua, UserData, Value}; +use mlua::prelude::*; use register::{Register, SheetId}; pub mod cell; @@ -97,7 +100,7 @@ impl SheetLuaRef { } } -impl UserData for SheetLuaRef { +impl LuaUserData for SheetLuaRef { fn add_fields<'lua, F: mlua::UserDataFields<'lua, Self>>(fields: &mut F) { fields.add_field_method_get("width", |_, luaref| { Ok(Register::get(luaref.id).unwrap().read().unwrap().width()) @@ -113,15 +116,18 @@ impl UserData for SheetLuaRef { if let Some(_) = Register::get(luaref.id) { Ok(CellRef::new(luaref.id, row, column).into_lua(lua).unwrap()) } else { - Ok(Value::Nil) + Ok(LuaValue::Nil) } }) } } - pub trait EvalFunction { - fn eval_function(&self, func: String, range: Vec<(usize, usize)>) -> JoinHandle>; + fn eval_function( + &self, + func: String, + range: Vec<(usize, usize)>, + ) -> JoinHandle>; } impl EvalFunction for Arc> { @@ -133,33 +139,30 @@ impl EvalFunction for Arc> { let this = Arc::clone(self); std::thread::spawn(move || { let read_sheet = this.read().unwrap(); - let mut sheet = read_sheet.clone(); *read_sheet.progress.lock().unwrap() = 0; + let mut sheet = read_sheet.clone(); + let lua = crate::lua::new_instance().unwrap(); let result = lua .load(func_text.clone()) .set_name("Temp Script") - .eval::(); + .eval::(); match result { Ok(func) => { for (i, (row, column)) in range.iter().enumerate() { - *read_sheet.progress.lock().unwrap() = (i * 100 / range.len()) as u8; let cellref = read_sheet.get_ref(*row, *column); - match func.call::<_, Cell>(cellref) { - Ok(value) => { - sheet.set_cell(*row, *column, value) - }, + Ok(cell) => sheet.set_cell(*row, *column, cell), Err(error) => return Err(error.to_string()), } } - Ok(sheet) } - Err(error) => Err(error.to_string()), + Err(error) => return Err(error.to_string()), } + + Ok(sheet) }) } - } -- cgit v1.2.3-70-g09d2