2024-09-17 23:00:30 +02:00
|
|
|
mod client;
|
|
|
|
mod workspace;
|
|
|
|
mod cursor;
|
|
|
|
mod buffer;
|
|
|
|
mod ext;
|
|
|
|
|
|
|
|
use mlua_codemp_patch as mlua;
|
|
|
|
use mlua::prelude::*;
|
|
|
|
use crate::prelude::*;
|
|
|
|
|
|
|
|
// define multiple entrypoints, so this library can have multiple names and still work
|
|
|
|
#[mlua::lua_module(name = "codemp")] fn entry_1(lua: &Lua) -> LuaResult<LuaTable> { entrypoint(lua) }
|
|
|
|
#[mlua::lua_module(name = "libcodemp")] fn entry_2(lua: &Lua) -> LuaResult<LuaTable> { entrypoint(lua) }
|
|
|
|
#[mlua::lua_module(name = "codemp_native")] fn entry_3(lua: &Lua) -> LuaResult<LuaTable> { entrypoint(lua) }
|
|
|
|
#[mlua::lua_module(name = "codemp_lua")] fn entry_4(lua: &Lua) -> LuaResult<LuaTable> { entrypoint(lua) }
|
|
|
|
|
|
|
|
fn entrypoint(lua: &Lua) -> LuaResult<LuaTable> {
|
|
|
|
let exports = lua.create_table()?;
|
|
|
|
|
|
|
|
// entrypoint
|
|
|
|
exports.set("connect", lua.create_function(|_, (config,):(CodempConfig,)|
|
|
|
|
ext::a_sync::a_sync! { => CodempClient::connect(config).await? }
|
|
|
|
)?)?;
|
|
|
|
|
|
|
|
// utils
|
|
|
|
exports.set("hash", lua.create_function(|_, (txt,):(String,)|
|
|
|
|
Ok(crate::ext::hash(txt))
|
|
|
|
)?)?;
|
|
|
|
|
2024-09-25 17:22:57 +02:00
|
|
|
exports.set("version", lua.create_function(|_, ()|
|
|
|
|
Ok(crate::version())
|
|
|
|
)?)?;
|
|
|
|
|
2024-09-17 23:00:30 +02:00
|
|
|
// runtime
|
2024-09-17 23:33:37 +02:00
|
|
|
exports.set("setup_driver", lua.create_function(ext::a_sync::setup_driver)?)?;
|
2024-09-17 23:00:30 +02:00
|
|
|
exports.set("poll_callback", lua.create_function(|lua, ()| {
|
|
|
|
let mut val = LuaMultiValue::new();
|
2024-09-17 23:27:27 +02:00
|
|
|
match ext::callback().recv() {
|
|
|
|
None => {},
|
|
|
|
Some(ext::callback::LuaCallback::Invoke(cb, arg)) => {
|
|
|
|
val.push_back(LuaValue::Function(cb));
|
|
|
|
val.push_back(arg.into_lua(lua)?);
|
|
|
|
}
|
|
|
|
Some(ext::callback::LuaCallback::Fail(msg)) => {
|
2024-09-18 00:30:23 +02:00
|
|
|
val.push_back(false.into_lua(lua)?);
|
|
|
|
val.push_back(msg.into_lua(lua)?);
|
2024-09-17 23:27:27 +02:00
|
|
|
},
|
2024-09-17 23:00:30 +02:00
|
|
|
}
|
|
|
|
Ok(val)
|
|
|
|
})?)?;
|
|
|
|
|
|
|
|
// logging
|
2024-09-17 23:33:37 +02:00
|
|
|
exports.set("setup_tracing", lua.create_function(ext::log::setup_tracing)?)?;
|
2024-09-17 23:00:30 +02:00
|
|
|
|
|
|
|
Ok(exports)
|
|
|
|
}
|
|
|
|
|
|
|
|
impl From::<crate::errors::ConnectionError> for LuaError {
|
|
|
|
fn from(value: crate::errors::ConnectionError) -> Self {
|
|
|
|
LuaError::runtime(value.to_string())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl From::<crate::errors::RemoteError> for LuaError {
|
|
|
|
fn from(value: crate::errors::RemoteError) -> Self {
|
|
|
|
LuaError::runtime(value.to_string())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl From::<crate::errors::ControllerError> for LuaError {
|
|
|
|
fn from(value: crate::errors::ControllerError) -> Self {
|
|
|
|
LuaError::runtime(value.to_string())
|
|
|
|
}
|
|
|
|
}
|