mirror of
https://github.com/hexedtech/codemp.git
synced 2025-04-05 11:01:34 +02:00
100 lines
2.2 KiB
Rust
100 lines
2.2 KiB
Rust
mod buffer;
|
|
mod client;
|
|
mod cursor;
|
|
mod ext;
|
|
mod workspace;
|
|
|
|
use crate::prelude::*;
|
|
use mlua::prelude::*;
|
|
use mlua_codemp_patch as mlua;
|
|
|
|
// 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)))?,
|
|
)?;
|
|
|
|
exports.set(
|
|
"version",
|
|
lua.create_function(|_, ()| Ok(crate::version()))?,
|
|
)?;
|
|
|
|
// runtime
|
|
exports.set(
|
|
"setup_driver",
|
|
lua.create_function(ext::a_sync::setup_driver)?,
|
|
)?;
|
|
exports.set(
|
|
"poll_callback",
|
|
lua.create_function(|lua, ()| {
|
|
let mut val = LuaMultiValue::new();
|
|
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)) => {
|
|
val.push_back(false.into_lua(lua)?);
|
|
val.push_back(msg.into_lua(lua)?);
|
|
}
|
|
}
|
|
Ok(val)
|
|
})?,
|
|
)?;
|
|
|
|
// logging
|
|
exports.set(
|
|
"setup_tracing",
|
|
lua.create_function(ext::log::setup_tracing)?,
|
|
)?;
|
|
|
|
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())
|
|
}
|
|
}
|