summaryrefslogtreecommitdiff
path: root/src/state/window.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/window.rs')
-rw-r--r--src/state/window.rs47
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)
+ }
+}