use crate::script::support::into_option_string;
use mlua::{Lua, Value};
pub fn trim(lua: &Lua, content_val: Value) -> mlua::Result<Value> {
let Some(content_str) = into_option_string(content_val, "aip.text.trim")? else {
return Ok(Value::Nil);
};
let trimmed_str = content_str.trim();
lua.create_string(trimmed_str).map(Value::String)
}
pub fn trim_start(lua: &Lua, content_val: Value) -> mlua::Result<Value> {
let Some(content_str) = into_option_string(content_val, "aip.text.trim_start")? else {
return Ok(Value::Nil);
};
let trimmed_str = content_str.trim_start();
lua.create_string(trimmed_str).map(Value::String)
}
pub fn trim_end(lua: &Lua, content_val: Value) -> mlua::Result<Value> {
let Some(content_str) = into_option_string(content_val, "aip.text.trim_end")? else {
return Ok(Value::Nil);
};
let trimmed_str = content_str.trim_end();
lua.create_string(trimmed_str).map(Value::String)
}
#[cfg(test)]
mod tests {
type Result<T> = core::result::Result<T, Box<dyn std::error::Error>>;
use crate::_test_support::{eval_lua, setup_lua};
use crate::script::aip_modules::aip_text;
#[tokio::test]
async fn test_lua_text_trim_simple() -> Result<()> {
let lua = setup_lua(aip_text::init_module, "text").await?;
let script = r#"return aip.text.trim(" hello world ")"#;
let res = eval_lua(&lua, script)?;
assert_eq!(res.as_str().ok_or("Should be string")?, "hello world");
Ok(())
}
#[tokio::test]
async fn test_lua_text_trim_nil_content() -> Result<()> {
let lua = setup_lua(aip_text::init_module, "text").await?;
let script = r#"return aip.text.trim(nil)"#;
let res = eval_lua(&lua, script)?;
assert!(res.is_null(), "Expected null for nil content input");
Ok(())
}
#[tokio::test]
async fn test_lua_text_trim_start_simple() -> Result<()> {
let lua = setup_lua(aip_text::init_module, "text").await?;
let script = r#"return aip.text.trim_start(" hello world ")"#;
let res = eval_lua(&lua, script)?;
assert_eq!(res.as_str().ok_or("Should be string")?, "hello world ");
Ok(())
}
#[tokio::test]
async fn test_lua_text_trim_start_nil_content() -> Result<()> {
let lua = setup_lua(aip_text::init_module, "text").await?;
let script = r#"return aip.text.trim_start(nil)"#;
let res = eval_lua(&lua, script)?;
assert!(res.is_null(), "Expected null for nil content input");
Ok(())
}
#[tokio::test]
async fn test_lua_text_trim_end_simple() -> Result<()> {
let lua = setup_lua(aip_text::init_module, "text").await?;
let script = r#"return aip.text.trim_end(" hello world ")"#;
let res = eval_lua(&lua, script)?;
assert_eq!(res.as_str().ok_or("Should be string")?, " hello world");
Ok(())
}
#[tokio::test]
async fn test_lua_text_trim_end_nil_content() -> Result<()> {
let lua = setup_lua(aip_text::init_module, "text").await?;
let script = r#"return aip.text.trim_end(nil)"#;
let res = eval_lua(&lua, script)?;
assert!(res.is_null(), "Expected null for nil content input");
Ok(())
}
}