use mlua::{FromLua, IntoLua}; #[derive(Default, Debug, Clone, Copy)] pub enum Mode { #[default] Normal, Visual, Command, } impl<'lua> FromLua<'lua> for Mode { fn from_lua( value: mlua::prelude::LuaValue<'lua>, _lua: &'lua mlua::prelude::Lua, ) -> mlua::prelude::LuaResult { if value.is_string() { match value.as_str().unwrap().to_lowercase().as_ref() { "normal" => Ok(Mode::Normal), "visual" => Ok(Mode::Visual), "command" => Ok(Mode::Command), _ => Err(mlua::Error::runtime( "mode needs to be 'normal', 'visual', 'insert' or 'command'", )), } } else { Err(mlua::Error::runtime( "mode needs to be 'normal', 'visual' 'insert', or 'command'", )) } } } impl<'lua> IntoLua<'lua> for Mode { fn into_lua( self, lua: &'lua mlua::prelude::Lua, ) -> mlua::prelude::LuaResult> { match self { Mode::Normal => "normal", Mode::Visual => "visual", Mode::Command => "command", } .into_lua(lua) } }