cx_sdk/client/
scopes.rs
1use std::str::FromStr;
16
17use crate::{
18 auth::AuthContext,
19 error::{
20 Result,
21 SdkApiError,
22 SdkError,
23 },
24 metadata::CallProperties,
25 util::make_request_with_metadata,
26};
27
28pub use cx_api::proto::com::coralogixapis::scopes::v1::{
29 EntityType,
30 Filter,
31};
32
33use cx_api::proto::com::coralogixapis::scopes::v1::{
34 CreateScopeRequest,
35 CreateScopeResponse,
36 DeleteScopeRequest,
37 DeleteScopeResponse,
38 GetScopesResponse,
39 GetTeamScopesByIdsRequest,
40 GetTeamScopesRequest,
41 UpdateScopeRequest,
42 UpdateScopeResponse,
43 scopes_service_client::ScopesServiceClient,
44};
45use tokio::sync::Mutex;
46use tonic::{
47 metadata::MetadataMap,
48 transport::{
49 Channel,
50 ClientTlsConfig,
51 Endpoint,
52 },
53};
54
55use crate::CoralogixRegion;
56
57const SCOPES_FEATURE_GROUP_ID: &str = "aaa";
58
59pub struct ScopesClient {
62 metadata_map: MetadataMap,
63 service_client: Mutex<ScopesServiceClient<Channel>>,
64}
65
66impl ScopesClient {
67 pub fn new(auth_context: AuthContext, region: CoralogixRegion) -> Result<Self> {
73 let channel: Channel = Endpoint::from_str(region.grpc_endpoint().as_str())?
74 .tls_config(ClientTlsConfig::new().with_native_roots())?
75 .connect_lazy();
76 let request_metadata: CallProperties = (&auth_context.team_level_api_key).into();
77 Ok(Self {
78 metadata_map: request_metadata.to_metadata_map(),
79 service_client: Mutex::new(ScopesServiceClient::new(channel)),
80 })
81 }
82
83 pub async fn create(
91 &self,
92 display_name: String,
93 description: Option<String>,
94 filters: Vec<Filter>,
95 default_expression: String,
96 ) -> Result<CreateScopeResponse> {
97 Ok(self
98 .service_client
99 .lock()
100 .await
101 .create_scope(make_request_with_metadata(
102 CreateScopeRequest {
103 display_name,
104 description,
105 filters,
106 default_expression,
107 },
108 &self.metadata_map,
109 ))
110 .await
111 .map_err(|status| {
112 SdkError::ApiError(SdkApiError {
113 status,
114 endpoint: "/com.coralogixapis.scopes.v1.ScopesService/CreateScope".to_string(),
115 feature_group: SCOPES_FEATURE_GROUP_ID.into(),
116 })
117 })?
118 .into_inner())
119 }
120
121 pub async fn update(
130 &self,
131 id: String,
132 display_name: String,
133 description: Option<String>,
134 filters: Vec<Filter>,
135 default_expression: String,
136 ) -> Result<UpdateScopeResponse> {
137 Ok(self
138 .service_client
139 .lock()
140 .await
141 .update_scope(make_request_with_metadata(
142 UpdateScopeRequest {
143 id,
144 display_name,
145 description,
146 filters,
147 default_expression,
148 },
149 &self.metadata_map,
150 ))
151 .await
152 .map_err(|status| {
153 SdkError::ApiError(SdkApiError {
154 status,
155 endpoint: "/com.coralogixapis.scopes.v1.ScopesService/UpdateScope".to_string(),
156 feature_group: SCOPES_FEATURE_GROUP_ID.into(),
157 })
158 })?
159 .into_inner())
160 }
161
162 pub async fn delete(&self, id: String) -> Result<DeleteScopeResponse> {
167 Ok(self
168 .service_client
169 .lock()
170 .await
171 .delete_scope(make_request_with_metadata(
172 DeleteScopeRequest { id },
173 &self.metadata_map,
174 ))
175 .await
176 .map_err(|status| {
177 SdkError::ApiError(SdkApiError {
178 status,
179 endpoint: "/com.coralogixapis.scopes.v1.ScopesService/DeleteScope".to_string(),
180 feature_group: SCOPES_FEATURE_GROUP_ID.into(),
181 })
182 })?
183 .into_inner())
184 }
185
186 pub async fn get(&self, ids: Vec<String>) -> Result<GetScopesResponse> {
191 Ok(self
192 .service_client
193 .lock()
194 .await
195 .get_team_scopes_by_ids(make_request_with_metadata(
196 GetTeamScopesByIdsRequest { ids },
197 &self.metadata_map,
198 ))
199 .await
200 .map_err(|status| {
201 SdkError::ApiError(SdkApiError {
202 status,
203 endpoint: "/com.coralogixapis.scopes.v1.ScopesService/GetTeamScopesByIds"
204 .to_string(),
205 feature_group: SCOPES_FEATURE_GROUP_ID.into(),
206 })
207 })?
208 .into_inner())
209 }
210
211 pub async fn list(&self) -> Result<GetScopesResponse> {
213 Ok(self
214 .service_client
215 .lock()
216 .await
217 .get_team_scopes(make_request_with_metadata(
218 GetTeamScopesRequest {},
219 &self.metadata_map,
220 ))
221 .await
222 .map_err(|status| {
223 SdkError::ApiError(SdkApiError {
224 status,
225 endpoint: "/com.coralogixapis.scopes.v1.ScopesService/GetTeamScopes"
226 .to_string(),
227 feature_group: SCOPES_FEATURE_GROUP_ID.into(),
228 })
229 })?
230 .into_inner())
231 }
232}