Skip to main content

Mountain/Environment/TreeViewProvider/
mod.rs

1//! # TreeViewProvider (Environment)
2//!
3//! Implements the
4//! [`TreeViewProvider`](CommonLibrary::TreeView::TreeViewProvider) trait for
5//! `MountainEnvironment`.
6//!
7//! This provider manages the lifecycle of custom tree views and orchestrates
8//! data flow between the extension host (Cocoon) and the UI (Sky). It handles
9//! registration, data dispatching, UI state updates, events, and state
10//! persistence.
11//!
12//! ## Implementation Strategy
13//!
14//! The trait implementation is split across multiple helper modules for
15//! maintainability:
16//! - `Registration`: `RegisterTreeDataProvider`, `UnregisterTreeDataProvider`
17//! - `DataAccess`: `GetChildren`, `GetTreeItem` (dispatcher logic)
18//! - `UIState`: `SetTreeViewMessage`, `SetTreeViewTitle`, `SetTreeViewBadge`
19//! - `Events`: `OnTreeNodeExpanded`, `OnTreeSelectionChanged`
20//! - `StatePersistence`: `PersistTreeViewState`, `RestoreTreeViewState`
21//! - `Visibility`: `RevealTreeItem`, `RefreshTreeView`
22//!
23//! The single `impl TreeViewProvider for MountainEnvironment` block in this
24//! file delegates to those helper functions. This satisfies Rust's orphan rules
25//! while keeping code organized.
26
27use CommonLibrary::TreeView::TreeViewProvider::TreeViewProvider;
28use async_trait::async_trait;
29
30// Private helper modules (not re-exported)
31mod Registration;
32
33mod DataAccess;
34
35mod UIState;
36
37mod Events;
38
39mod StatePersistence;
40
41mod Visibility;
42
43#[async_trait]
44impl TreeViewProvider for crate::Environment::MountainEnvironment::MountainEnvironment {
45	async fn RegisterTreeDataProvider(
46		&self,
47
48		view_identifier:String,
49
50		options:serde_json::Value,
51	) -> Result<(), CommonLibrary::Error::CommonError::CommonError> {
52		Registration::register_tree_data_provider(self, view_identifier, options).await
53	}
54
55	async fn UnregisterTreeDataProvider(
56		&self,
57
58		view_identifier:String,
59	) -> Result<(), CommonLibrary::Error::CommonError::CommonError> {
60		Registration::unregister_tree_data_provider(self, view_identifier).await
61	}
62
63	async fn GetChildren(
64		&self,
65
66		view_identifier:String,
67
68		element_handle:Option<String>,
69	) -> Result<Vec<serde_json::Value>, CommonLibrary::Error::CommonError::CommonError> {
70		DataAccess::get_children(self, view_identifier, element_handle).await
71	}
72
73	async fn GetTreeItem(
74		&self,
75
76		view_identifier:String,
77
78		element_handle:String,
79	) -> Result<serde_json::Value, CommonLibrary::Error::CommonError::CommonError> {
80		DataAccess::get_tree_item(self, view_identifier, element_handle).await
81	}
82
83	async fn SetTreeViewMessage(
84		&self,
85
86		view_identifier:String,
87
88		message:Option<String>,
89	) -> Result<(), CommonLibrary::Error::CommonError::CommonError> {
90		UIState::set_tree_view_message(self, view_identifier, message).await
91	}
92
93	async fn SetTreeViewTitle(
94		&self,
95
96		view_identifier:String,
97
98		title:Option<String>,
99
100		description:Option<String>,
101	) -> Result<(), CommonLibrary::Error::CommonError::CommonError> {
102		UIState::set_tree_view_title(self, view_identifier, title, description).await
103	}
104
105	async fn SetTreeViewBadge(
106		&self,
107
108		view_identifier:String,
109
110		badge:Option<serde_json::Value>,
111	) -> Result<(), CommonLibrary::Error::CommonError::CommonError> {
112		UIState::set_tree_view_badge(self, view_identifier, badge).await
113	}
114
115	async fn OnTreeNodeExpanded(
116		&self,
117
118		view_identifier:String,
119
120		element_handle:String,
121
122		is_expanded:bool,
123	) -> Result<(), CommonLibrary::Error::CommonError::CommonError> {
124		Events::on_tree_node_expanded(self, view_identifier, element_handle, is_expanded).await
125	}
126
127	async fn OnTreeSelectionChanged(
128		&self,
129
130		view_identifier:String,
131
132		selected_handles:Vec<String>,
133	) -> Result<(), CommonLibrary::Error::CommonError::CommonError> {
134		Events::on_tree_selection_changed(self, view_identifier, selected_handles).await
135	}
136
137	async fn PersistTreeViewState(
138		&self,
139
140		view_identifier:String,
141	) -> Result<serde_json::Value, CommonLibrary::Error::CommonError::CommonError> {
142		StatePersistence::persist_tree_view_state(self, view_identifier).await
143	}
144
145	async fn RestoreTreeViewState(
146		&self,
147
148		view_identifier:String,
149
150		state_value:serde_json::Value,
151	) -> Result<(), CommonLibrary::Error::CommonError::CommonError> {
152		StatePersistence::restore_tree_view_state(self, view_identifier, state_value).await
153	}
154
155	async fn RevealTreeItem(
156		&self,
157
158		view_identifier:String,
159
160		item_handle:String,
161
162		options:serde_json::Value,
163	) -> Result<(), CommonLibrary::Error::CommonError::CommonError> {
164		Visibility::reveal_tree_item(self, view_identifier, item_handle, options).await
165	}
166
167	async fn RefreshTreeView(
168		&self,
169
170		view_identifier:String,
171
172		items_to_refresh:Option<serde_json::Value>,
173	) -> Result<(), CommonLibrary::Error::CommonError::CommonError> {
174		Visibility::refresh_tree_view(self, view_identifier, items_to_refresh).await
175	}
176}