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
21 view_identifier:String,
22
23 element_handle:Option<String>,
24) -> Result<Vec<Value>, CommonError> {
25 dev_log!(
26 "extensions",
27 "[TreeViewProvider] Getting children for view '{}', handle: {:?}",
28 view_identifier,
29 element_handle
30 );
31
32 let provider_info = env
33 .ApplicationState
34 .Feature
35 .TreeViews
36 .ActiveTreeViews
37 .lock()
38 .map_err(Utility::ErrorMapping::MapApplicationStateLockErrorToCommonError)?
39 .get(&view_identifier)
40 .cloned();
41
42 if let Some(info) = provider_info {
43 if let Some(native_provider) = info.Provider {
44 return native_provider.GetChildren(view_identifier, element_handle).await;
46 } else if let Some(side_car_id) = info.SideCarIdentifier {
47 let ipc_provider:Arc<dyn IPCProvider> = env.Require();
49
50 let rpc_method = format!("{}$getChildren", ProxyTarget::ExtHostTreeView.GetTargetPrefix());
51
52 let rpc_params = serde_json::json!([view_identifier, element_handle]);
53
54 let response = ipc_provider
55 .SendRequestToSideCar(side_car_id, rpc_method, rpc_params, 10000)
56 .await?;
57
58 return serde_json::from_value::<Vec<Value>>(response).map_err(CommonError::from);
59 }
60 }
61
62 Err(CommonError::TreeViewProviderNotFound { ViewIdentifier:view_identifier })
63}
64
65pub(super) async fn get_tree_item(
68 env:&crate::Environment::MountainEnvironment::MountainEnvironment,
69
70 view_identifier:String,
71
72 element_handle:String,
73) -> Result<Value, CommonError> {
74 dev_log!(
75 "extensions",
76 "[TreeViewProvider] Getting item for view '{}', handle: {}",
77 view_identifier,
78 element_handle
79 );
80
81 let provider_info = env
82 .ApplicationState
83 .Feature
84 .TreeViews
85 .ActiveTreeViews
86 .lock()
87 .map_err(Utility::ErrorMapping::MapApplicationStateLockErrorToCommonError)?
88 .get(&view_identifier)
89 .cloned();
90
91 if let Some(info) = provider_info {
92 if let Some(native_provider) = info.Provider {
93 return native_provider.GetTreeItem(view_identifier, element_handle).await;
94 } else if let Some(side_car_id) = info.SideCarIdentifier {
95 let ipc_provider:Arc<dyn IPCProvider> = env.Require();
96
97 let rpc_method = format!("{}$getTreeItem", ProxyTarget::ExtHostTreeView.GetTargetPrefix());
98
99 let rpc_params = serde_json::json!([view_identifier, element_handle]);
100
101 return ipc_provider
102 .SendRequestToSideCar(side_car_id, rpc_method, rpc_params, 5000)
103 .await;
104 }
105 }
106
107 Err(CommonError::TreeViewProviderNotFound { ViewIdentifier:view_identifier })
108}