mlua-socket 0.2.7

A Rust-native implementation of LuaSocket for mlua.
use mlua::{Error, FromLua, Lua};
use std::thread;
use std::time::Duration;

pub(super) fn handle(lua: &Lua, arg: mlua::Value) -> Result<(), Error> {
    let dur = Duration::from_secs_f64(f64::from_lua(arg, lua)?);
    thread::sleep(dur);
    Ok(())
}

#[cfg(test)]
mod tests {
    use mlua::Lua;
    use std::error::Error;
    use std::time::Instant;

    #[test]
    fn sleep() -> Result<(), Box<dyn Error>> {
        let lua = Lua::new();
        crate::preload(&lua)?;
        let start_time = Instant::now();
        lua.load(
            r#"
                local socket = require('socket')
                socket.sleep(0.2)
            "#,
        )
        .exec()?;
        let elapsed = start_time.elapsed();
        assert!(elapsed.as_millis() > 190);
        assert!(elapsed.as_millis() < 400);
        Ok(())
    }
}