dstest 0.1.3

Deterministic Simulation Testing for containerised services
use mlua::{Lua, Result, Table};

use crate::bindings::context::BindingContext;
use std::time::{SystemTime, UNIX_EPOCH};

pub fn register(lua: &Lua, dstest: &Table, _ctx: &BindingContext) -> Result<()> {
    let clock_fn = lua.create_function(move |lua, _: ()| {
        let now = SystemTime::now()
            .duration_since(UNIX_EPOCH)
            .expect("time went backwards");

        let t = lua.create_table()?;
        t.set("nanos", now.as_nanos() as u64)?;
        t.set("micros", now.as_micros() as u64)?;
        t.set("millis", now.as_millis() as u64)?;
        t.set("secs", now.as_secs())?;

        Ok(t)
    })?;

    dstest.set("clock", clock_fn)?;
    Ok(())
}