mlua-image 0.1.3

Lua bindings and embedding of the Rust based 'image' imaging library.
use crate::DynamicImage;
use mlua::{Error, Lua};

pub(super) fn handle(_lua: &Lua, path: String) -> Result<DynamicImage, Error> {
    let dynamic_image = image::open(path).map_err(|err| Error::RuntimeError(err.to_string()))?;
    let user_data = DynamicImage {
        delegate: dynamic_image,
    };
    Ok(user_data)
}

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

    #[test]
    fn open_non_existent() -> Result<(), Box<dyn Error>> {
        let lua = Lua::new();
        crate::preload(&lua)?;
        let script = r#"
            local image = require('image')
            image.open('/tmp/_non_existent_')
        "#;
        let result = lua.load(script).exec();
        assert!(result.is_err());
        Ok(())
    }

    #[test]
    fn open_fractal_png() -> Result<(), Box<dyn Error>> {
        let lua = Lua::new();
        crate::preload(&lua)?;
        let script = r#"
            local image = require('image')
            image.open('testdata/fractal.png')
        "#;
        let result = lua.load(script).exec();
        assert!(result.is_ok());
        Ok(())
    }
}