From e492e150138c11b957d7d429bb16661d5b7a1566 Mon Sep 17 00:00:00 2001 From: Nova Date: Wed, 14 Sep 2022 22:39:15 -0400 Subject: [PATCH] refactor(items): environment submodule --- src/core/client.rs | 4 ++-- src/nodes/items/environment.rs | 31 +++++++++++++++++++++++++++++ src/nodes/{item.rs => items/mod.rs} | 31 ++++------------------------- src/nodes/mod.rs | 4 ++-- src/wayland/panel_item.rs | 2 +- src/wayland/seat.rs | 2 +- 6 files changed, 41 insertions(+), 33 deletions(-) create mode 100644 src/nodes/items/environment.rs rename src/nodes/{item.rs => items/mod.rs} (93%) diff --git a/src/core/client.rs b/src/core/client.rs index 125c7bb..73b8946 100644 --- a/src/core/client.rs +++ b/src/core/client.rs @@ -4,7 +4,7 @@ use crate::nodes::data; use crate::nodes::field; use crate::nodes::hmd; use crate::nodes::input; -use crate::nodes::item; +use crate::nodes::items; use crate::nodes::model; use crate::nodes::root::Root; use crate::nodes::spatial; @@ -73,7 +73,7 @@ impl Client { field::create_interface(&client); model::create_interface(&client); data::create_interface(&client); - item::create_interface(&client); + items::create_interface(&client); input::create_interface(&client); let _ = client.join_handle.set(tokio::spawn({ diff --git a/src/nodes/items/environment.rs b/src/nodes/items/environment.rs new file mode 100644 index 0000000..3d9d4bd --- /dev/null +++ b/src/nodes/items/environment.rs @@ -0,0 +1,31 @@ +use super::{Item, ItemSpecialization, ItemType, ITEM_TYPE_INFO_ENVIRONMENT}; +use crate::{core::client::Client, nodes::Node}; +use anyhow::{anyhow, Result}; +use std::sync::Arc; + +pub struct EnvironmentItem { + path: String, +} +impl EnvironmentItem { + pub fn add_to(node: &Arc, path: String) { + Item::add_to( + node, + &ITEM_TYPE_INFO_ENVIRONMENT, + ItemType::Environment(EnvironmentItem { path }), + ); + node.add_local_method("getPath", EnvironmentItem::get_path_flex); + } + + fn get_path_flex(node: &Node, _calling_client: Arc, _data: &[u8]) -> Result> { + let path: Result = match &node.item.get().unwrap().specialization { + ItemType::Environment(env) => Ok(env.path.clone()), + _ => Err(anyhow!("")), + }; + Ok(flexbuffers::singleton(path?.as_str())) + } +} +impl ItemSpecialization for EnvironmentItem { + fn serialize_start_data(&self, vec: &mut flexbuffers::VectorBuilder) { + vec.push(self.path.as_str()); + } +} diff --git a/src/nodes/item.rs b/src/nodes/items/mod.rs similarity index 93% rename from src/nodes/item.rs rename to src/nodes/items/mod.rs index 3a7d3a5..673c15c 100644 --- a/src/nodes/item.rs +++ b/src/nodes/items/mod.rs @@ -1,3 +1,7 @@ +mod environment; + +use self::environment::EnvironmentItem; + use super::field::Field; use super::spatial::{get_spatial_parent_flex, get_transform_pose_flex, Spatial}; use super::{Alias, Node}; @@ -169,33 +173,6 @@ impl Deref for ItemType { } } -pub struct EnvironmentItem { - path: String, -} -impl EnvironmentItem { - pub fn add_to(node: &Arc, path: String) { - Item::add_to( - node, - &ITEM_TYPE_INFO_ENVIRONMENT, - ItemType::Environment(EnvironmentItem { path }), - ); - node.add_local_method("getPath", EnvironmentItem::get_path_flex); - } - - fn get_path_flex(node: &Node, _calling_client: Arc, _data: &[u8]) -> Result> { - let path: Result = match &node.item.get().unwrap().specialization { - ItemType::Environment(env) => Ok(env.path.clone()), - _ => Err(anyhow!("")), - }; - Ok(flexbuffers::singleton(path?.as_str())) - } -} -impl ItemSpecialization for EnvironmentItem { - fn serialize_start_data(&self, vec: &mut flexbuffers::VectorBuilder) { - vec.push(self.path.as_str()); - } -} - pub struct ItemUI { node: Weak, type_info: &'static TypeInfo, diff --git a/src/nodes/mod.rs b/src/nodes/mod.rs index a843143..90519c9 100644 --- a/src/nodes/mod.rs +++ b/src/nodes/mod.rs @@ -3,7 +3,7 @@ pub mod data; pub mod field; pub mod hmd; pub mod input; -pub mod item; +pub mod items; pub mod model; pub mod root; pub mod spatial; @@ -27,7 +27,7 @@ use self::alias::Alias; use self::data::{PulseReceiver, PulseSender}; use self::field::Field; use self::input::{InputHandler, InputMethod}; -use self::item::{Item, ItemAcceptor, ItemUI}; +use self::items::{Item, ItemAcceptor, ItemUI}; use self::model::Model; use self::spatial::Spatial; diff --git a/src/wayland/panel_item.rs b/src/wayland/panel_item.rs index 2acad54..659a293 100644 --- a/src/wayland/panel_item.rs +++ b/src/wayland/panel_item.rs @@ -8,7 +8,7 @@ use crate::{ registry::Registry, }, nodes::{ - item::{register_item_ui_flex, Item, ItemSpecialization, ItemType, TypeInfo}, + items::{register_item_ui_flex, Item, ItemSpecialization, ItemType, TypeInfo}, spatial::Spatial, Node, }, diff --git a/src/wayland/seat.rs b/src/wayland/seat.rs index 06824cb..428e5ff 100644 --- a/src/wayland/seat.rs +++ b/src/wayland/seat.rs @@ -1,5 +1,5 @@ use super::{state::WaylandState, surface::CoreSurface, GLOBAL_DESTROY_QUEUE}; -use crate::nodes::item::Item; +use crate::nodes::items::Item; use anyhow::Result; use mint::Vector2; use nanoid::nanoid;