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