diff options
Diffstat (limited to 'src/state/window.rs')
| -rw-r--r-- | src/state/window.rs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/state/window.rs b/src/state/window.rs new file mode 100644 index 0000000..288b5b4 --- /dev/null +++ b/src/state/window.rs @@ -0,0 +1,47 @@ +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<Self> { + 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<mlua::prelude::LuaValue<'lua>> { + match self { + Window::View => "view", + Window::Editor => "editor", + Window::Log => "log", + Window::Error => "error", + }.into_lua(lua) + } +} |