hutc 0.1.0

Simple af rest api testing client using lua
use mlua::{UserData, Value};

#[derive(Clone)]
pub struct Expect {
    pub value: Value,
    pub error_message: Option<String>,
}

impl Expect {
    fn assertion_error(&self, detail: String) -> mlua::Error {
        if let Some(msg) = &self.error_message {
            mlua::Error::RuntimeError(format!("{msg}: {detail}"))
        } else {
            mlua::Error::RuntimeError(detail)
        }
    }
}

impl UserData for Expect {
    fn add_methods<M: mlua::UserDataMethods<Self>>(methods: &mut M) {
        methods.add_method_mut("msg", |_, this, message: String| {
            this.error_message = Some(message);
            Ok(this.clone())
        });
        methods.add_method("to_equal", |_, this, expected: Value| {
            if this.value == expected {
                Ok(())
            } else {
                Err(this.assertion_error(format!("expected {:?} got {:?}", expected, this.value)))
            }
        });
        methods.add_method("to_not_equal", |_, this, expected: Value| {
            if this.value != expected {
                Ok(())
            } else {
                Err(this.assertion_error(format!("did not expect {:?}", expected)))
            }
        });
        methods.add_method("to_exist", |_, this, _: ()| match this.value {
            Value::Nil => Err(this.assertion_error("expected value to exist got nil".into())),
            _ => Ok(()),
        });
    }
}