use mlua::{FromLua, IntoLua}; #[derive(Default, Debug, Clone, Copy)] pub enum Window { #[default] View, Editor, Log, Error, } impl<'lua> FromLua<'lua> for Window { 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() { "view" => Ok(Window::View), "editor" => Ok(Window::Editor), "log" => Ok(Window::Log), "error" => Ok(Window::Error), _ => Err(mlua::Error::runtime( "window needs to be 'view', 'editor', 'log' or 'error'", )), } } else { Err(mlua::Error::runtime( "window needs to be 'view', 'editor', 'log' or 'error'", )) } } } impl<'lua> IntoLua<'lua> for Window { fn into_lua( self, lua: &'lua mlua::prelude::Lua, ) -> mlua::prelude::LuaResult> { match self { Window::View => "view", Window::Editor => "editor", Window::Log => "log", Window::Error => "error", }.into_lua(lua) } }