mlua-periphery 1.2.4

A Rust-native implementation of lua-periphery for mlua.
use mlua::Lua;
use std::env;
use std::error::Error;

const LED: &str = "LED";

#[test]
fn constructor() -> Result<(), Box<dyn Error>> {
    let led = match env::var(LED) {
        Ok(ok) => ok,
        Err(_e) => {
            log::warn!("Skipping test because no {LED} is set");
            return Ok(());
        }
    };
    let lua = Lua::new();
    super::preload(&lua)?;
    let script = r#"
        local LED = require('periphery.LED')
        local led = LED('_led_')
    "#
    .replace("_led_", &led);
    lua.load(script).exec()?;
    Ok(())
}

#[test]
fn name_field() -> Result<(), Box<dyn Error>> {
    let led = match env::var(LED) {
        Ok(ok) => ok,
        Err(_e) => {
            log::warn!("Skipping test because no {LED} is set");
            return Ok(());
        }
    };
    let lua = Lua::new();
    super::preload(&lua)?;
    let script = r#"
        local LED = require('periphery.LED')
        local led = LED('_led_')
        return led.name
    "#
    .replace("_led_", &led);
    let name: String = lua.load(script).eval()?;
    assert_eq!(name, led);
    Ok(())
}

#[test]
fn read() -> Result<(), Box<dyn Error>> {
    let led = match env::var(LED) {
        Ok(ok) => ok,
        Err(_e) => {
            log::warn!("Skipping test because no {LED} is set");
            return Ok(());
        }
    };
    let lua = Lua::new();
    super::preload(&lua)?;
    let script = r#"
        local LED = require('periphery.LED')
        local led = LED('_led_')
        return led:read()
    "#
    .replace("_led_", &led);
    let _value: bool = lua.load(script).eval()?;
    Ok(())
}

#[test]
fn brightness_field() -> Result<(), Box<dyn Error>> {
    let led = match env::var(LED) {
        Ok(ok) => ok,
        Err(_e) => {
            log::warn!("Skipping test because no {LED} is set");
            return Ok(());
        }
    };
    let lua = Lua::new();
    super::preload(&lua)?;
    let script = r#"
        local LED = require('periphery.LED')
        local led = LED('_led_')
        return led.brightness
    "#
    .replace("_led_", &led);
    let _brightness: u32 = lua.load(script).eval()?;
    Ok(())
}

#[test]
fn max_brightness_field() -> Result<(), Box<dyn Error>> {
    let led = match env::var(LED) {
        Ok(ok) => ok,
        Err(_e) => {
            log::warn!("Skipping test because no {LED} is set");
            return Ok(());
        }
    };
    let lua = Lua::new();
    super::preload(&lua)?;
    let script = r#"
        local LED = require('periphery.LED')
        local led = LED('_led_')
        return led.max_brightness
    "#
    .replace("_led_", &led);
    let max_brightness: u32 = lua.load(script).eval()?;
    assert!(max_brightness > 0);
    Ok(())
}