mirror of
https://github.com/hexedtech/codemp.git
synced 2024-11-22 15:24:48 +01:00
feat(lua): use serde for IntoLua too
so now it creates a table on the fly and the thing that lua receives behaves like you would expect instead of being weird!
This commit is contained in:
parent
a721e17024
commit
c63a3ec73a
5 changed files with 21 additions and 115 deletions
|
@ -3,7 +3,8 @@ use mlua::prelude::*;
|
||||||
use mlua_codemp_patch as mlua;
|
use mlua_codemp_patch as mlua;
|
||||||
|
|
||||||
use super::ext::a_sync::a_sync;
|
use super::ext::a_sync::a_sync;
|
||||||
use super::ext::from_lua_serde;
|
|
||||||
|
super::ext::impl_lua_serde! { CodempTextChange CodempBufferUpdate }
|
||||||
|
|
||||||
impl LuaUserData for CodempBufferController {
|
impl LuaUserData for CodempBufferController {
|
||||||
fn add_methods<M: LuaUserDataMethods<Self>>(methods: &mut M) {
|
fn add_methods<M: LuaUserDataMethods<Self>>(methods: &mut M) {
|
||||||
|
@ -38,36 +39,3 @@ impl LuaUserData for CodempBufferController {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
from_lua_serde! { CodempTextChange }
|
|
||||||
impl LuaUserData for CodempTextChange {
|
|
||||||
fn add_fields<F: LuaUserDataFields<Self>>(fields: &mut F) {
|
|
||||||
fields.add_field_method_get("content", |_, this| Ok(this.content.clone()));
|
|
||||||
fields.add_field_method_get("start", |_, this| Ok(this.start));
|
|
||||||
fields.add_field_method_get("end", |_, this| Ok(this.end));
|
|
||||||
// add a 'finish' accessor too because in Lua 'end' is reserved
|
|
||||||
fields.add_field_method_get("finish", |_, this| Ok(this.end));
|
|
||||||
}
|
|
||||||
|
|
||||||
fn add_methods<M: LuaUserDataMethods<Self>>(methods: &mut M) {
|
|
||||||
methods.add_meta_method(LuaMetaMethod::ToString, |_, this, ()| {
|
|
||||||
Ok(format!("{:?}", this))
|
|
||||||
});
|
|
||||||
methods.add_method("apply", |_, this, (txt,): (String,)| Ok(this.apply(&txt)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
from_lua_serde! { CodempBufferUpdate }
|
|
||||||
impl LuaUserData for CodempBufferUpdate {
|
|
||||||
fn add_fields<F: LuaUserDataFields<Self>>(fields: &mut F) {
|
|
||||||
fields.add_field_method_get("hash", |_, this| Ok(this.hash));
|
|
||||||
fields.add_field_method_get("version", |_, this| Ok(this.version.clone()));
|
|
||||||
fields.add_field_method_get("change", |_, this| Ok(this.change.clone()));
|
|
||||||
}
|
|
||||||
|
|
||||||
fn add_methods<M: LuaUserDataMethods<Self>>(methods: &mut M) {
|
|
||||||
methods.add_meta_method(LuaMetaMethod::ToString, |_, this, ()| {
|
|
||||||
Ok(format!("{:?}", this))
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -3,20 +3,17 @@ use mlua::prelude::*;
|
||||||
use mlua_codemp_patch as mlua;
|
use mlua_codemp_patch as mlua;
|
||||||
|
|
||||||
use super::ext::a_sync::a_sync;
|
use super::ext::a_sync::a_sync;
|
||||||
use super::ext::from_lua_serde;
|
|
||||||
|
super::ext::impl_lua_serde! { CodempConfig CodempUser }
|
||||||
|
|
||||||
impl LuaUserData for CodempClient {
|
impl LuaUserData for CodempClient {
|
||||||
fn add_fields<F: LuaUserDataFields<Self>>(fields: &mut F) {
|
|
||||||
}
|
|
||||||
|
|
||||||
fn add_methods<M: LuaUserDataMethods<Self>>(methods: &mut M) {
|
fn add_methods<M: LuaUserDataMethods<Self>>(methods: &mut M) {
|
||||||
methods.add_meta_method(LuaMetaMethod::ToString, |_, this, ()| {
|
methods.add_meta_method(LuaMetaMethod::ToString, |_, this, ()| {
|
||||||
Ok(format!("{:?}", this))
|
Ok(format!("{:?}", this))
|
||||||
});
|
});
|
||||||
|
|
||||||
fields.add_method("user", |_, this| Ok(this.user().id.to_string()));
|
methods.add_method("current_user", |_, this, ()| Ok(this.current_user().clone()));
|
||||||
fields.add_method("username", |_, this| Ok(this.my_user().name.clone()));
|
methods.add_method("active_workspaces", |_, this, ()| Ok(this.active_workspaces()));
|
||||||
fields.add_method("active_workspaces", |_, this| Ok(this.active_workspaces()));
|
|
||||||
|
|
||||||
methods.add_method(
|
methods.add_method(
|
||||||
"refresh",
|
"refresh",
|
||||||
|
@ -55,14 +52,3 @@ impl LuaUserData for CodempClient {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
from_lua_serde! { CodempConfig }
|
|
||||||
impl LuaUserData for CodempConfig {
|
|
||||||
fn add_fields<F: LuaUserDataFields<Self>>(fields: &mut F) {
|
|
||||||
fields.add_field_method_get("username", |_, this| Ok(this.username.clone()));
|
|
||||||
fields.add_field_method_get("password", |_, this| Ok(this.password.clone()));
|
|
||||||
fields.add_field_method_get("host", |_, this| Ok(this.host.clone()));
|
|
||||||
fields.add_field_method_get("port", |_, this| Ok(this.port));
|
|
||||||
fields.add_field_method_get("tls", |_, this| Ok(this.tls));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -3,7 +3,8 @@ use mlua::prelude::*;
|
||||||
use mlua_codemp_patch as mlua;
|
use mlua_codemp_patch as mlua;
|
||||||
|
|
||||||
use super::ext::a_sync::a_sync;
|
use super::ext::a_sync::a_sync;
|
||||||
use super::ext::from_lua_serde;
|
|
||||||
|
super::ext::impl_lua_serde! { CodempCursor CodempSelection }
|
||||||
|
|
||||||
impl LuaUserData for CodempCursorController {
|
impl LuaUserData for CodempCursorController {
|
||||||
fn add_methods<M: LuaUserDataMethods<Self>>(methods: &mut M) {
|
fn add_methods<M: LuaUserDataMethods<Self>>(methods: &mut M) {
|
||||||
|
@ -29,34 +30,3 @@ impl LuaUserData for CodempCursorController {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
from_lua_serde! { CodempCursor }
|
|
||||||
impl LuaUserData for CodempCursor {
|
|
||||||
fn add_fields<F: LuaUserDataFields<Self>>(fields: &mut F) {
|
|
||||||
fields.add_field_method_get("user", |_, this| Ok(this.user.clone()));
|
|
||||||
fields.add_field_method_get("sel", |_, this| Ok(this.sel.clone()));
|
|
||||||
}
|
|
||||||
|
|
||||||
fn add_methods<M: LuaUserDataMethods<Self>>(methods: &mut M) {
|
|
||||||
methods.add_meta_method(LuaMetaMethod::ToString, |_, this, ()| {
|
|
||||||
Ok(format!("{:?}", this))
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
from_lua_serde! { CodempSelection }
|
|
||||||
impl LuaUserData for CodempSelection {
|
|
||||||
fn add_fields<F: LuaUserDataFields<Self>>(fields: &mut F) {
|
|
||||||
fields.add_field_method_get("buffer", |_, this| Ok(this.buffer.clone()));
|
|
||||||
fields.add_field_method_get("start_row", |_, this| Ok(this.start_row));
|
|
||||||
fields.add_field_method_get("start_col", |_, this| Ok(this.start_col));
|
|
||||||
fields.add_field_method_get("end_row", |_, this| Ok(this.end_row));
|
|
||||||
fields.add_field_method_get("end_col", |_, this| Ok(this.end_col));
|
|
||||||
}
|
|
||||||
|
|
||||||
fn add_methods<M: LuaUserDataMethods<Self>>(methods: &mut M) {
|
|
||||||
methods.add_meta_method(LuaMetaMethod::ToString, |_, this, ()| {
|
|
||||||
Ok(format!("{:?}", this))
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ pub mod log;
|
||||||
pub(crate) use a_sync::tokio;
|
pub(crate) use a_sync::tokio;
|
||||||
pub(crate) use callback::callback;
|
pub(crate) use callback::callback;
|
||||||
|
|
||||||
macro_rules! from_lua_serde {
|
macro_rules! impl_lua_serde {
|
||||||
($($t:ty)*) => {
|
($($t:ty)*) => {
|
||||||
$(
|
$(
|
||||||
impl FromLua for $t {
|
impl FromLua for $t {
|
||||||
|
@ -13,8 +13,14 @@ macro_rules! from_lua_serde {
|
||||||
lua.from_value(value)
|
lua.from_value(value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl IntoLua for $t {
|
||||||
|
fn into_lua(self, lua: &Lua) -> LuaResult<LuaValue> {
|
||||||
|
lua.to_value(&self)
|
||||||
|
}
|
||||||
|
}
|
||||||
)*
|
)*
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) use from_lua_serde;
|
pub(crate) use impl_lua_serde;
|
||||||
|
|
|
@ -4,6 +4,8 @@ use mlua_codemp_patch as mlua;
|
||||||
|
|
||||||
use super::ext::a_sync::a_sync;
|
use super::ext::a_sync::a_sync;
|
||||||
|
|
||||||
|
super::ext::impl_lua_serde! { CodempEvent }
|
||||||
|
|
||||||
impl LuaUserData for CodempWorkspace {
|
impl LuaUserData for CodempWorkspace {
|
||||||
fn add_methods<M: LuaUserDataMethods<Self>>(methods: &mut M) {
|
fn add_methods<M: LuaUserDataMethods<Self>>(methods: &mut M) {
|
||||||
methods.add_meta_method(LuaMetaMethod::ToString, |_, this, ()| {
|
methods.add_meta_method(LuaMetaMethod::ToString, |_, this, ()| {
|
||||||
|
@ -48,9 +50,9 @@ impl LuaUserData for CodempWorkspace {
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
fields.add_method("id", |_, this, ()| Ok(this.id()));
|
methods.add_method("id", |_, this, ()| Ok(this.id()));
|
||||||
fields.add_method("cursor", |_, this, ()| Ok(this.cursor()));
|
methods.add_method("cursor", |_, this, ()| Ok(this.cursor()));
|
||||||
fields.add_method("active_buffers", |_, this, ()| Ok(this.active_buffers()));
|
methods.add_method("active_buffers", |_, this, ()| Ok(this.active_buffers()));
|
||||||
methods.add_method("user_list", |_, this, ()| Ok(this.user_list()));
|
methods.add_method("user_list", |_, this, ()| Ok(this.user_list()));
|
||||||
|
|
||||||
methods.add_method("recv", |_, this, ()| a_sync! { this => this.recv().await? });
|
methods.add_method("recv", |_, this, ()| a_sync! { this => this.recv().await? });
|
||||||
|
@ -70,30 +72,4 @@ impl LuaUserData for CodempWorkspace {
|
||||||
|
|
||||||
methods.add_method("clear_callback", |_, this, ()| Ok(this.clear_callback()));
|
methods.add_method("clear_callback", |_, this, ()| Ok(this.clear_callback()));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn add_fields<F: LuaUserDataFields<Self>>(fields: &mut F) {
|
|
||||||
// fields.add_field_method_get("users", |_, this| Ok(this.0.users())); // TODO
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
from_lua_serde! { CodempEvent }
|
|
||||||
impl LuaUserData for CodempEvent {
|
|
||||||
fn add_methods<M: LuaUserDataMethods<Self>>(methods: &mut M) {
|
|
||||||
methods.add_meta_method(LuaMetaMethod::ToString, |_, this, ()| {
|
|
||||||
Ok(format!("{:?}", this))
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
fn add_fields<F: LuaUserDataFields<Self>>(fields: &mut F) {
|
|
||||||
fields.add_field_method_get("type", |_, this| match this {
|
|
||||||
CodempEvent::FileTreeUpdated(_) => Ok("filetree"),
|
|
||||||
CodempEvent::UserJoin(_) => Ok("join"),
|
|
||||||
CodempEvent::UserLeave(_) => Ok("leave"),
|
|
||||||
});
|
|
||||||
fields.add_field_method_get("value", |_, this| match this {
|
|
||||||
CodempEvent::FileTreeUpdated(x)
|
|
||||||
| CodempEvent::UserJoin(x)
|
|
||||||
| CodempEvent::UserLeave(x) => Ok(x.clone()),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue