use mlua::{Value, FromLua, Table}; use uuid::Uuid; use crate::{Player, ClientInfo}; use super::UuidUD; pub enum PluginEvent { Kick(Uuid, Option<String>), } impl<'lua> FromLua<'lua> for PluginEvent { fn from_lua(lua_value: Value<'lua>, lua: &'lua mlua::Lua) -> mlua::Result<Self> { let table = Table::from_lua(lua_value, lua)?; let ty: Box<str> = table.get("type")?; match ty.as_ref() { "kick" => Ok(Self::Kick(table.get::<_, UuidUD>("uuid")?.0, table.get("msg")?)), _ => Err(mlua::Error::RuntimeError(format!("unknown event type {ty}"))), } } } pub enum ServerEvent { Join(Player, ClientInfo), Leave(Player), }