aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs3
-rw-r--r--src/plugins/factoid/mod.rs31
-rw-r--r--src/plugins/factoid/utils.rs10
3 files changed, 22 insertions, 22 deletions
diff --git a/src/main.rs b/src/main.rs
index ef24e4d..ed205f3 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,6 +1,3 @@
-#![cfg_attr(feature = "clippy", feature(plugin))]
-#![cfg_attr(feature = "clippy", plugin(clippy))]
-
extern crate frippy;
extern crate glob;
extern crate irc;
diff --git a/src/plugins/factoid/mod.rs b/src/plugins/factoid/mod.rs
index 4fcc7a0..5a484e6 100644
--- a/src/plugins/factoid/mod.rs
+++ b/src/plugins/factoid/mod.rs
@@ -210,20 +210,23 @@ impl<T: Database, C: Client> Factoid<T, C> {
.collect::<Vec<String>>();
let lua = unsafe { Lua::new_with_debug() };
- let globals = lua.globals();
-
- globals.set("factoid", code)?;
- globals.set("download", lua.create_function(download)?)?;
- globals.set("json_decode", lua.create_function(json_decode)?)?;
- globals.set("sleep", lua.create_function(sleep)?)?;
- globals.set("args", args)?;
- globals.set("input", command.tokens.join(" "))?;
- globals.set("user", command.source.clone())?;
- globals.set("channel", command.target.clone())?;
- globals.set("output", lua.create_table()?)?;
-
- lua.exec::<()>(LUA_SANDBOX, Some(name))?;
- let output: Vec<String> = globals.get::<_, Vec<String>>("output")?;
+ let output = lua.context(|ctx| {
+ let globals = ctx.globals();
+
+ globals.set("factoid", code)?;
+ globals.set("download", ctx.create_function(|ctx, url| download(&ctx, url))?)?;
+ globals.set("json_decode", ctx.create_function(|ctx, json| json_decode(&ctx, json))?)?;
+ globals.set("sleep", ctx.create_function(|ctx, ms| sleep(&ctx, ms))?)?;
+ globals.set("args", args)?;
+ globals.set("input", command.tokens.join(" "))?;
+ globals.set("user", command.source.clone())?;
+ globals.set("channel", command.target.clone())?;
+ globals.set("output", ctx.create_table()?)?;
+
+ ctx.load(LUA_SANDBOX).set_name(name)?.exec()?;
+
+ Ok(globals.get::<_, Vec<String>>("output")?)
+ })?;
Ok(output.join("|"))
}
diff --git a/src/plugins/factoid/utils.rs b/src/plugins/factoid/utils.rs
index 7bd9b20..bd1bf43 100644
--- a/src/plugins/factoid/utils.rs
+++ b/src/plugins/factoid/utils.rs
@@ -5,19 +5,19 @@ use serde_json::{self, Value as SerdeValue};
use super::rlua::Error as LuaError;
use super::rlua::Error::RuntimeError;
-use super::rlua::{Lua, Value as LuaValue};
+use super::rlua::{Context, Value as LuaValue};
use utils::error::ErrorKind::Connection;
use utils::Url;
use failure::Fail;
-pub fn sleep(_: &Lua, dur: u64) -> Result<(), LuaError> {
+pub fn sleep(_: &Context, dur: u64) -> Result<(), LuaError> {
thread::sleep(Duration::from_millis(dur));
Ok(())
}
-pub fn download(_: &Lua, url: String) -> Result<String, LuaError> {
+pub fn download(_: &Context, url: String) -> Result<String, LuaError> {
let url = Url::from(url).max_kib(1024);
match url.request() {
Ok(v) => Ok(v),
@@ -36,7 +36,7 @@ pub fn download(_: &Lua, url: String) -> Result<String, LuaError> {
}
}
-fn convert_value(lua: &Lua, sval: SerdeValue, max_recurs: usize) -> Result<LuaValue, LuaError> {
+fn convert_value<'l>(lua: &Context<'l>, sval: SerdeValue, max_recurs: usize) -> Result<LuaValue<'l>, LuaError> {
if max_recurs == 0 {
return Err(RuntimeError(String::from(
"Reached max recursion level - json is nested too deep",
@@ -74,7 +74,7 @@ fn convert_value(lua: &Lua, sval: SerdeValue, max_recurs: usize) -> Result<LuaVa
Ok(lval)
}
-pub fn json_decode(lua: &Lua, json: String) -> Result<LuaValue, LuaError> {
+pub fn json_decode<'l>(lua: &Context<'l>, json: String) -> Result<LuaValue<'l>, LuaError> {
let ser_val: SerdeValue =
serde_json::from_str(&json).map_err(|e| RuntimeError(e.to_string()))?;