cx_sdk/client/
views_folders.rs
1use std::str::FromStr;
16
17use crate::{
18 auth::AuthContext,
19 com::coralogixapis::views::v1::services::{
20 CreateViewFolderRequest,
21 CreateViewFolderResponse,
22 DeleteViewFolderRequest,
23 DeleteViewFolderResponse,
24 GetViewFolderRequest,
25 ListViewFoldersRequest,
26 ReplaceViewFolderRequest,
27 ReplaceViewFolderResponse,
28 views_folders_service_client::ViewsFoldersServiceClient,
29 },
30 error::{
31 Result,
32 SdkApiError,
33 },
34 metadata::CallProperties,
35 util::make_request_with_metadata,
36};
37
38pub use crate::com::coralogixapis::views::v1::ViewFolder;
39
40use tokio::sync::Mutex;
41use tonic::{
42 metadata::MetadataMap,
43 transport::{
44 Channel,
45 ClientTlsConfig,
46 Endpoint,
47 },
48};
49
50use crate::CoralogixRegion;
51
52const FEATURE_GROUP_ID: &str = "data-exploration";
53
54pub struct ViewFoldersClient {
57 teams_level_metadata_map: MetadataMap,
58 service_client: Mutex<ViewsFoldersServiceClient<Channel>>,
59}
60
61impl ViewFoldersClient {
62 pub fn new(auth_context: AuthContext, region: CoralogixRegion) -> Result<Self> {
68 let channel: Channel = Endpoint::from_str(region.grpc_endpoint().as_str())?
69 .tls_config(ClientTlsConfig::new().with_native_roots())?
70 .connect_lazy();
71 let request_metadata: CallProperties = (&auth_context.team_level_api_key).into();
72 Ok(Self {
73 teams_level_metadata_map: request_metadata.to_metadata_map(),
74 service_client: Mutex::new(ViewsFoldersServiceClient::new(channel)),
75 })
76 }
77
78 pub async fn create(&self, folder: ViewFolder) -> Result<CreateViewFolderResponse> {
83 let request = make_request_with_metadata(
84 CreateViewFolderRequest { name: folder.name },
85 &self.teams_level_metadata_map,
86 );
87 Ok(self
88 .service_client
89 .lock()
90 .await
91 .create_view_folder(request)
92 .await
93 .map_err(|status| SdkApiError {
94 status,
95 endpoint:
96 "/com.coralogixapis.views.v1.services.ViewsFoldersService/CreateViewFolder"
97 .into(),
98 feature_group: FEATURE_GROUP_ID.into(),
99 })?
100 .into_inner())
101 }
102
103 pub async fn replace(&self, folder: ViewFolder) -> Result<ReplaceViewFolderResponse> {
108 let request = make_request_with_metadata(
109 ReplaceViewFolderRequest {
110 folder: Some(folder),
111 },
112 &self.teams_level_metadata_map,
113 );
114 Ok(self
115 .service_client
116 .lock()
117 .await
118 .replace_view_folder(request)
119 .await
120 .map_err(|status| SdkApiError {
121 status,
122 endpoint: "/com.coralogixapis.views.v1.services.ViewFoldersService/ReplaceView"
123 .to_string(),
124 feature_group: FEATURE_GROUP_ID.to_string(),
125 })?
126 .into_inner())
127 }
128
129 pub async fn delete(&self, id: String) -> Result<DeleteViewFolderResponse> {
134 let request = make_request_with_metadata(
135 DeleteViewFolderRequest { id: Some(id) },
136 &self.teams_level_metadata_map,
137 );
138 Ok(self
139 .service_client
140 .lock()
141 .await
142 .delete_view_folder(request)
143 .await
144 .map_err(|status| SdkApiError {
145 status,
146 endpoint:
147 "/com.coralogixapis.views.v1.services.ViewsFoldersService/DeleteViewFolder"
148 .to_string(),
149 feature_group: FEATURE_GROUP_ID.to_string(),
150 })?
151 .into_inner())
152 }
153
154 pub async fn get(&self, id: String) -> Result<Option<ViewFolder>> {
159 let request = make_request_with_metadata(
160 GetViewFolderRequest { id: Some(id) },
161 &self.teams_level_metadata_map,
162 );
163
164 Ok(self
165 .service_client
166 .lock()
167 .await
168 .get_view_folder(request)
169 .await
170 .map_err(|status| SdkApiError {
171 status,
172 endpoint: "/com.coralogixapis.views.v1.services.ViewsFoldersService/GetViewFolder"
173 .to_string(),
174 feature_group: FEATURE_GROUP_ID.to_string(),
175 })?
176 .into_inner()
177 .folder)
178 }
179
180 pub async fn list(&self) -> Result<Vec<ViewFolder>> {
185 let request =
186 make_request_with_metadata(ListViewFoldersRequest {}, &self.teams_level_metadata_map);
187
188 Ok(self
189 .service_client
190 .lock()
191 .await
192 .list_view_folders(request)
193 .await
194 .map_err(|status| SdkApiError {
195 status,
196 endpoint:
197 "/com.coralogixapis.views.v1.services.ViewsFoldersService/ListViewFolders"
198 .to_string(),
199 feature_group: FEATURE_GROUP_ID.to_string(),
200 })?
201 .into_inner()
202 .folders)
203 }
204}