mlua-periphery 1.2.4

A Rust-native implementation of lua-periphery for mlua.
mod testsupport;

use mlua::Lua;
use std::env;
use std::error::Error;

const GPIO_TEST_LOOPBACK: &str = "GPIO_TEST_LOOPBACK";

#[test]
fn loopback() -> Result<(), Box<dyn Error>> {
    if let Err(_e) = env::var(GPIO_TEST_LOOPBACK) {
        log::warn!("Skipping test because no {GPIO_TEST_LOOPBACK} is set");
        return Ok(());
    }
    let (skip, chip) = testsupport::get_gpio_chip()?;
    if skip {
        return Ok(());
    };
    let (skip, line_in) = testsupport::get_gpio_line_in()?;
    if skip {
        return Ok(());
    };
    let (skip, line_out) = testsupport::get_gpio_line_out()?;
    if skip {
        return Ok(());
    };
    let lua = Lua::new();
    mlua_periphery::preload(&lua)?;
    testsupport::preload(&lua)?;
    let script = r#"
        local GPIO = require('periphery.GPIO')
        local gpio_in = GPIO({
            path='_chip_',
            line=_line_in_,
            direction='in',
            edge='both',
        })
        local gpio_out = GPIO('_chip_', _line_out_, 'out')
        gpio_out:write(true)
        assert(gpio_in:read() == true)
        gpio_out:write(false)
        assert(gpio_in:read() == false)
    "#
    .replace("_chip_", &chip)
    .replace("_line_in_", &line_in)
    .replace("_line_out_", &line_out);
    lua.load(script).exec()?;
    Ok(())
}