Mountain/Environment/TreeViewProvider/
DataAccess.rs1use std::sync::Arc;
6
7use CommonLibrary::{
8 Environment::Requires::Requires,
9 Error::CommonError::CommonError,
10 IPC::{self, DTO::ProxyTarget::ProxyTarget, IPCProvider::IPCProvider},
11};
12use log::debug;
13use serde_json::Value;
14
15use crate::Environment::Utility;
16
17pub(super) async fn get_children(
20 env:&crate::Environment::MountainEnvironment::MountainEnvironment,
21 view_identifier:String,
22 element_handle:Option<String>,
23) -> Result<Vec<Value>, CommonError> {
24 debug!(
25 "[TreeViewProvider] Getting children for view '{}', handle: {:?}",
26 view_identifier, element_handle
27 );
28
29 let provider_info = env
30 .ApplicationState
31 .Feature
32 .TreeViews
33 .ActiveTreeViews
34 .lock()
35 .map_err(Utility::MapApplicationStateLockErrorToCommonError)?
36 .get(&view_identifier)
37 .cloned();
38
39 if let Some(info) = provider_info {
40 if let Some(native_provider) = info.Provider {
41 return native_provider.GetChildren(view_identifier, element_handle).await;
43 } else if let Some(side_car_id) = info.SideCarIdentifier {
44 let ipc_provider:Arc<dyn IPCProvider> = env.Require();
46
47 let rpc_method = format!("{}$getChildren", ProxyTarget::ExtHostTreeView.GetTargetPrefix());
48
49 let rpc_params = serde_json::json!([view_identifier, element_handle]);
50
51 let response = ipc_provider
52 .SendRequestToSideCar(side_car_id, rpc_method, rpc_params, 10000)
53 .await?;
54
55 return serde_json::from_value::<Vec<Value>>(response).map_err(CommonError::from);
56 }
57 }
58 Err(CommonError::TreeViewProviderNotFound { ViewIdentifier:view_identifier })
59}
60
61pub(super) async fn get_tree_item(
64 env:&crate::Environment::MountainEnvironment::MountainEnvironment,
65 view_identifier:String,
66 element_handle:String,
67) -> Result<Value, CommonError> {
68 debug!(
69 "[TreeViewProvider] Getting item for view '{}', handle: {}",
70 view_identifier, element_handle
71 );
72
73 let provider_info = env
74 .ApplicationState
75 .Feature
76 .TreeViews
77 .ActiveTreeViews
78 .lock()
79 .map_err(Utility::MapApplicationStateLockErrorToCommonError)?
80 .get(&view_identifier)
81 .cloned();
82
83 if let Some(info) = provider_info {
84 if let Some(native_provider) = info.Provider {
85 return native_provider.GetTreeItem(view_identifier, element_handle).await;
86 } else if let Some(side_car_id) = info.SideCarIdentifier {
87 let ipc_provider:Arc<dyn IPCProvider> = env.Require();
88
89 let rpc_method = format!("{}$getTreeItem", ProxyTarget::ExtHostTreeView.GetTargetPrefix());
90
91 let rpc_params = serde_json::json!([view_identifier, element_handle]);
92
93 return ipc_provider
94 .SendRequestToSideCar(side_car_id, rpc_method, rpc_params, 5000)
95 .await;
96 }
97 }
98 Err(CommonError::TreeViewProviderNotFound { ViewIdentifier:view_identifier })
99}