Skip to main content

gestalt/
external_credential.rs

1// Code generated by sdkgen. DO NOT EDIT.
2
3//! Generated native types and clients for external_credential.proto.
4
5use crate::codec::external_credential::{
6    from_wire_exchange_external_credential_response, from_wire_external_credential,
7    from_wire_list_external_credentials_response, from_wire_resolve_external_credential_response,
8    to_wire_delete_external_credential_request, to_wire_exchange_external_credential_request,
9    to_wire_get_external_credential_request, to_wire_list_external_credentials_request,
10    to_wire_resolve_external_credential_request, to_wire_upsert_external_credential_request,
11    to_wire_validate_external_credential_config_request,
12};
13use crate::codec::host_service::{HostServiceChannel, connect_host_service, plain_channel};
14use crate::generated::v1;
15use crate::rpc_support::GestaltError;
16
17/// Native message type for `gestalt.provider.v1.DeleteExternalCredentialRequest`.
18#[derive(Clone, Debug, Default, PartialEq)]
19pub struct DeleteExternalCredentialRequest {
20    /// The `id` field.
21    pub id: String,
22}
23
24/// Native message type for `gestalt.provider.v1.ExchangeExternalCredentialRequest`.
25#[derive(Clone, Debug, Default, PartialEq)]
26pub struct ExchangeExternalCredentialRequest {
27    /// The `provider` field.
28    pub provider: String,
29    /// The `connection` field.
30    pub connection: String,
31    /// The `connection_id` field.
32    pub connection_id: String,
33    /// The `credential_subject_id` field.
34    pub credential_subject_id: String,
35    /// The `actor_subject_id` field.
36    pub actor_subject_id: String,
37    /// The `instance` field.
38    pub instance: String,
39    /// The `auth` field; None when unset.
40    pub auth: Option<ExternalCredentialAuthConfig>,
41    /// The `credential_json` field.
42    pub credential_json: String,
43    /// The `connection_params` field.
44    pub connection_params: std::collections::BTreeMap<String, String>,
45}
46
47/// Native message type for `gestalt.provider.v1.ExchangeExternalCredentialResponse`.
48#[derive(Clone, Debug, Default, PartialEq)]
49pub struct ExchangeExternalCredentialResponse {
50    /// The `token_response` field; None when unset.
51    pub token_response: Option<ExternalCredentialTokenResponse>,
52}
53
54/// Native message type for `gestalt.provider.v1.ExternalCredential`.
55#[derive(Clone, Debug, Default, PartialEq)]
56pub struct ExternalCredential {
57    /// The `id` field.
58    pub id: String,
59    /// The `subject_id` field.
60    pub subject_id: String,
61    /// The `instance` field.
62    pub instance: String,
63    /// The `access_token` field.
64    pub access_token: String,
65    /// The `refresh_token` field.
66    pub refresh_token: String,
67    /// The `scopes` field.
68    pub scopes: String,
69    /// The `expires_at` field; None when unset.
70    pub expires_at: Option<std::time::SystemTime>,
71    /// The `last_refreshed_at` field; None when unset.
72    pub last_refreshed_at: Option<std::time::SystemTime>,
73    /// The `refresh_error_count` field.
74    pub refresh_error_count: i32,
75    /// The `metadata_json` field.
76    pub metadata_json: String,
77    /// The `created_at` field; None when unset.
78    pub created_at: Option<std::time::SystemTime>,
79    /// The `updated_at` field; None when unset.
80    pub updated_at: Option<std::time::SystemTime>,
81    /// The `connection_id` field.
82    pub connection_id: String,
83}
84
85/// Native message type for `gestalt.provider.v1.ExternalCredentialAuthConfig`.
86#[derive(Clone, Debug, Default, PartialEq)]
87pub struct ExternalCredentialAuthConfig {
88    /// The `type` field.
89    pub r#type: String,
90    /// The `token` field.
91    pub token: String,
92    /// The `token_prefix` field.
93    pub token_prefix: String,
94    /// The `grant_type` field.
95    pub grant_type: String,
96    /// The `token_url` field.
97    pub token_url: String,
98    /// The `client_id` field.
99    pub client_id: String,
100    /// The `client_secret` field.
101    pub client_secret: String,
102    /// The `client_auth` field.
103    pub client_auth: String,
104    /// The `token_exchange` field.
105    pub token_exchange: String,
106    /// The `scopes` field.
107    pub scopes: Vec<String>,
108    /// The `scope_param` field.
109    pub scope_param: String,
110    /// The `scope_separator` field.
111    pub scope_separator: String,
112    /// The `token_params` field.
113    pub token_params: std::collections::BTreeMap<String, String>,
114    /// The `refresh_params` field.
115    pub refresh_params: std::collections::BTreeMap<String, String>,
116    /// The `accept_header` field.
117    pub accept_header: String,
118    /// The `access_token_path` field.
119    pub access_token_path: String,
120    /// The `token_exchange_drivers` field.
121    pub token_exchange_drivers: Vec<ExternalCredentialTokenExchangeDriver>,
122    /// The `refresh_token` field.
123    pub refresh_token: String,
124}
125
126/// Native message type for `gestalt.provider.v1.ExternalCredentialLookup`.
127#[derive(Clone, Debug, Default, PartialEq)]
128pub struct ExternalCredentialLookup {
129    /// The `subject_id` field.
130    pub subject_id: String,
131    /// The `instance` field.
132    pub instance: String,
133    /// The `connection_id` field.
134    pub connection_id: String,
135}
136
137/// Native message type for `gestalt.provider.v1.ExternalCredentialTokenExchangeDriver`.
138#[derive(Clone, Debug, Default, PartialEq)]
139pub struct ExternalCredentialTokenExchangeDriver {
140    /// The `type` field.
141    pub r#type: String,
142    /// The `target_principal` field.
143    pub target_principal: String,
144    /// The `scopes` field.
145    pub scopes: Vec<String>,
146    /// The `lifetime_seconds` field.
147    pub lifetime_seconds: i32,
148    /// The `endpoint` field.
149    pub endpoint: String,
150    /// The `params` field.
151    pub params: std::collections::BTreeMap<String, String>,
152}
153
154/// Native message type for `gestalt.provider.v1.ExternalCredentialTokenResponse`.
155#[derive(Clone, Debug, Default, PartialEq)]
156pub struct ExternalCredentialTokenResponse {
157    /// The `access_token` field.
158    pub access_token: String,
159    /// The `refresh_token` field.
160    pub refresh_token: String,
161    /// The `expires_in` field.
162    pub expires_in: i32,
163    /// The `token_type` field.
164    pub token_type: String,
165    /// The `extra_json` field.
166    pub extra_json: String,
167    /// The `refresh_source` field.
168    pub refresh_source: String,
169}
170
171/// Native message type for `gestalt.provider.v1.GetExternalCredentialRequest`.
172#[derive(Clone, Debug, Default, PartialEq)]
173pub struct GetExternalCredentialRequest {
174    /// The `lookup` field; None when unset.
175    pub lookup: Option<ExternalCredentialLookup>,
176}
177
178/// Native message type for `gestalt.provider.v1.ListExternalCredentialsRequest`.
179#[derive(Clone, Debug, Default, PartialEq)]
180pub struct ListExternalCredentialsRequest {
181    /// The `subject_id` field.
182    pub subject_id: String,
183    /// The `instance` field.
184    pub instance: String,
185    /// The `connection_id` field.
186    pub connection_id: String,
187}
188
189/// Native message type for `gestalt.provider.v1.ListExternalCredentialsResponse`.
190#[derive(Clone, Debug, Default, PartialEq)]
191pub struct ListExternalCredentialsResponse {
192    /// The `credentials` field.
193    pub credentials: Vec<ExternalCredential>,
194}
195
196/// Native message type for `gestalt.provider.v1.ResolveExternalCredentialRequest`.
197#[derive(Clone, Debug, Default, PartialEq)]
198pub struct ResolveExternalCredentialRequest {
199    /// The `provider` field.
200    pub provider: String,
201    /// The `connection` field.
202    pub connection: String,
203    /// The `connection_id` field.
204    pub connection_id: String,
205    /// The `mode` field.
206    pub mode: String,
207    /// The `credential_subject_id` field.
208    pub credential_subject_id: String,
209    /// The `actor_subject_id` field.
210    pub actor_subject_id: String,
211    /// The `instance` field.
212    pub instance: String,
213    /// The `auth` field; None when unset.
214    pub auth: Option<ExternalCredentialAuthConfig>,
215    /// The `connection_params` field.
216    pub connection_params: std::collections::BTreeMap<String, String>,
217}
218
219/// Native message type for `gestalt.provider.v1.ResolveExternalCredentialResponse`.
220#[derive(Clone, Debug, Default, PartialEq)]
221pub struct ResolveExternalCredentialResponse {
222    /// The `token` field.
223    pub token: String,
224    /// The `expires_at` field; None when unset.
225    pub expires_at: Option<std::time::SystemTime>,
226    /// The `metadata_json` field.
227    pub metadata_json: String,
228    /// The `params` field.
229    pub params: std::collections::BTreeMap<String, String>,
230    /// The `credential` field; None when unset.
231    pub credential: Option<ExternalCredential>,
232}
233
234/// Native message type for `gestalt.provider.v1.UpsertExternalCredentialRequest`.
235#[derive(Clone, Debug, Default, PartialEq)]
236pub struct UpsertExternalCredentialRequest {
237    /// The `credential` field; None when unset.
238    pub credential: Option<ExternalCredential>,
239    /// The `preserve_timestamps` field.
240    pub preserve_timestamps: bool,
241}
242
243/// Native message type for `gestalt.provider.v1.ValidateExternalCredentialConfigRequest`.
244#[derive(Clone, Debug, Default, PartialEq)]
245pub struct ValidateExternalCredentialConfigRequest {
246    /// The `provider` field.
247    pub provider: String,
248    /// The `connection` field.
249    pub connection: String,
250    /// The `connection_id` field.
251    pub connection_id: String,
252    /// The `mode` field.
253    pub mode: String,
254    /// The `auth` field; None when unset.
255    pub auth: Option<ExternalCredentialAuthConfig>,
256    /// The `connection_params` field.
257    pub connection_params: std::collections::BTreeMap<String, String>,
258}
259
260/// Client for the `gestalt.provider.v1.ExternalCredentials` service.
261pub struct ExternalCredentials {
262    inner: v1::external_credentials_client::ExternalCredentialsClient<HostServiceChannel>,
263    timeout: Option<std::time::Duration>,
264}
265
266impl ExternalCredentials {
267    /// Creates a client over an established channel.
268    pub fn new(channel: tonic::transport::Channel) -> Self {
269        Self {
270            inner: v1::external_credentials_client::ExternalCredentialsClient::new(plain_channel(
271                channel,
272            )),
273            timeout: None,
274        }
275    }
276
277    /// Sets a deadline applied to every unary call; calls that run past it
278    /// fail with DEADLINE_EXCEEDED. Streaming calls are unaffected.
279    pub fn with_timeout(mut self, timeout: std::time::Duration) -> Self {
280        self.timeout = Some(timeout);
281        self
282    }
283
284    /// Connects to the `external_credentials` host service described by the environment.
285    pub async fn connect() -> Result<Self, GestaltError> {
286        Self::connect_named("").await
287    }
288
289    /// Connects to the named `external_credentials` host-service binding.
290    pub async fn connect_named(name: &str) -> Result<Self, GestaltError> {
291        Ok(Self {
292            inner: v1::external_credentials_client::ExternalCredentialsClient::new(
293                connect_host_service("external_credentials", name).await?,
294            ),
295            timeout: None,
296        })
297    }
298
299    /// Calls `gestalt.provider.v1.ExternalCredentials.UpsertCredential`.
300    pub async fn upsert_credential(
301        &mut self,
302        preserve_timestamps: bool,
303        credential: Option<ExternalCredential>,
304    ) -> Result<ExternalCredential, GestaltError> {
305        let request = UpsertExternalCredentialRequest {
306            preserve_timestamps,
307            credential,
308        };
309        let mut tonic_request =
310            tonic::Request::new(to_wire_upsert_external_credential_request(request));
311        if let Some(timeout) = self.timeout {
312            tonic_request.set_timeout(timeout);
313        }
314        let response = self.inner.upsert_credential(tonic_request).await?;
315        Ok(from_wire_external_credential(response.into_inner()))
316    }
317
318    /// Calls `gestalt.provider.v1.ExternalCredentials.UpsertCredential` with the full request and response messages.
319    pub async fn upsert_credential_raw(
320        &mut self,
321        request: UpsertExternalCredentialRequest,
322    ) -> Result<ExternalCredential, GestaltError> {
323        let mut tonic_request =
324            tonic::Request::new(to_wire_upsert_external_credential_request(request));
325        if let Some(timeout) = self.timeout {
326            tonic_request.set_timeout(timeout);
327        }
328        let response = self.inner.upsert_credential(tonic_request).await?;
329        Ok(from_wire_external_credential(response.into_inner()))
330    }
331
332    /// Calls `gestalt.provider.v1.ExternalCredentials.GetCredential`.
333    pub async fn get_credential(
334        &mut self,
335        lookup: Option<ExternalCredentialLookup>,
336    ) -> Result<ExternalCredential, GestaltError> {
337        let request = GetExternalCredentialRequest { lookup };
338        let mut tonic_request =
339            tonic::Request::new(to_wire_get_external_credential_request(request));
340        if let Some(timeout) = self.timeout {
341            tonic_request.set_timeout(timeout);
342        }
343        let response = self.inner.get_credential(tonic_request).await?;
344        Ok(from_wire_external_credential(response.into_inner()))
345    }
346
347    /// Calls `gestalt.provider.v1.ExternalCredentials.GetCredential` with the full request and response messages.
348    pub async fn get_credential_raw(
349        &mut self,
350        request: GetExternalCredentialRequest,
351    ) -> Result<ExternalCredential, GestaltError> {
352        let mut tonic_request =
353            tonic::Request::new(to_wire_get_external_credential_request(request));
354        if let Some(timeout) = self.timeout {
355            tonic_request.set_timeout(timeout);
356        }
357        let response = self.inner.get_credential(tonic_request).await?;
358        Ok(from_wire_external_credential(response.into_inner()))
359    }
360
361    /// Calls `gestalt.provider.v1.ExternalCredentials.ListCredentials`.
362    pub async fn list_credentials(
363        &mut self,
364        subject_id: String,
365        instance: String,
366        connection_id: String,
367    ) -> Result<Vec<ExternalCredential>, GestaltError> {
368        let request = ListExternalCredentialsRequest {
369            subject_id,
370            instance,
371            connection_id,
372        };
373        let mut tonic_request =
374            tonic::Request::new(to_wire_list_external_credentials_request(request));
375        if let Some(timeout) = self.timeout {
376            tonic_request.set_timeout(timeout);
377        }
378        let response = from_wire_list_external_credentials_response(
379            self.inner
380                .list_credentials(tonic_request)
381                .await?
382                .into_inner(),
383        );
384        Ok(response.credentials)
385    }
386
387    /// Calls `gestalt.provider.v1.ExternalCredentials.ListCredentials` with the full request and response messages.
388    pub async fn list_credentials_raw(
389        &mut self,
390        request: ListExternalCredentialsRequest,
391    ) -> Result<ListExternalCredentialsResponse, GestaltError> {
392        let mut tonic_request =
393            tonic::Request::new(to_wire_list_external_credentials_request(request));
394        if let Some(timeout) = self.timeout {
395            tonic_request.set_timeout(timeout);
396        }
397        let response = self.inner.list_credentials(tonic_request).await?;
398        Ok(from_wire_list_external_credentials_response(
399            response.into_inner(),
400        ))
401    }
402
403    /// Calls `gestalt.provider.v1.ExternalCredentials.DeleteCredential`.
404    pub async fn delete_credential(&mut self, id: String) -> Result<(), GestaltError> {
405        let request = DeleteExternalCredentialRequest { id };
406        let mut tonic_request =
407            tonic::Request::new(to_wire_delete_external_credential_request(request));
408        if let Some(timeout) = self.timeout {
409            tonic_request.set_timeout(timeout);
410        }
411        self.inner.delete_credential(tonic_request).await?;
412        Ok(())
413    }
414
415    /// Calls `gestalt.provider.v1.ExternalCredentials.DeleteCredential` with the full request and response messages.
416    pub async fn delete_credential_raw(
417        &mut self,
418        request: DeleteExternalCredentialRequest,
419    ) -> Result<(), GestaltError> {
420        let mut tonic_request =
421            tonic::Request::new(to_wire_delete_external_credential_request(request));
422        if let Some(timeout) = self.timeout {
423            tonic_request.set_timeout(timeout);
424        }
425        self.inner.delete_credential(tonic_request).await?;
426        Ok(())
427    }
428
429    /// Calls `gestalt.provider.v1.ExternalCredentials.ValidateCredentialConfig`.
430    pub async fn validate_credential_config(
431        &mut self,
432        provider: String,
433        connection: String,
434        connection_id: String,
435        mode: String,
436        auth: Option<ExternalCredentialAuthConfig>,
437    ) -> Result<(), GestaltError> {
438        let request = ValidateExternalCredentialConfigRequest {
439            provider,
440            connection,
441            connection_id,
442            mode,
443            auth,
444            ..Default::default()
445        };
446        let mut tonic_request =
447            tonic::Request::new(to_wire_validate_external_credential_config_request(request));
448        if let Some(timeout) = self.timeout {
449            tonic_request.set_timeout(timeout);
450        }
451        self.inner.validate_credential_config(tonic_request).await?;
452        Ok(())
453    }
454
455    /// Calls `gestalt.provider.v1.ExternalCredentials.ValidateCredentialConfig` with the full request and response messages.
456    pub async fn validate_credential_config_raw(
457        &mut self,
458        request: ValidateExternalCredentialConfigRequest,
459    ) -> Result<(), GestaltError> {
460        let mut tonic_request =
461            tonic::Request::new(to_wire_validate_external_credential_config_request(request));
462        if let Some(timeout) = self.timeout {
463            tonic_request.set_timeout(timeout);
464        }
465        self.inner.validate_credential_config(tonic_request).await?;
466        Ok(())
467    }
468
469    /// Calls `gestalt.provider.v1.ExternalCredentials.ResolveCredential`.
470    #[allow(clippy::too_many_arguments)]
471    pub async fn resolve_credential(
472        &mut self,
473        provider: String,
474        connection: String,
475        connection_id: String,
476        mode: String,
477        credential_subject_id: String,
478        actor_subject_id: String,
479        instance: String,
480        auth: Option<ExternalCredentialAuthConfig>,
481    ) -> Result<ResolveExternalCredentialResponse, GestaltError> {
482        let request = ResolveExternalCredentialRequest {
483            provider,
484            connection,
485            connection_id,
486            mode,
487            credential_subject_id,
488            actor_subject_id,
489            instance,
490            auth,
491            ..Default::default()
492        };
493        let mut tonic_request =
494            tonic::Request::new(to_wire_resolve_external_credential_request(request));
495        if let Some(timeout) = self.timeout {
496            tonic_request.set_timeout(timeout);
497        }
498        let response = self.inner.resolve_credential(tonic_request).await?;
499        Ok(from_wire_resolve_external_credential_response(
500            response.into_inner(),
501        ))
502    }
503
504    /// Calls `gestalt.provider.v1.ExternalCredentials.ResolveCredential` with the full request and response messages.
505    pub async fn resolve_credential_raw(
506        &mut self,
507        request: ResolveExternalCredentialRequest,
508    ) -> Result<ResolveExternalCredentialResponse, GestaltError> {
509        let mut tonic_request =
510            tonic::Request::new(to_wire_resolve_external_credential_request(request));
511        if let Some(timeout) = self.timeout {
512            tonic_request.set_timeout(timeout);
513        }
514        let response = self.inner.resolve_credential(tonic_request).await?;
515        Ok(from_wire_resolve_external_credential_response(
516            response.into_inner(),
517        ))
518    }
519
520    /// Calls `gestalt.provider.v1.ExternalCredentials.ExchangeCredential`.
521    #[allow(clippy::too_many_arguments)]
522    pub async fn exchange_credential(
523        &mut self,
524        provider: String,
525        connection: String,
526        connection_id: String,
527        credential_subject_id: String,
528        actor_subject_id: String,
529        instance: String,
530        credential_json: String,
531        auth: Option<ExternalCredentialAuthConfig>,
532    ) -> Result<Option<ExternalCredentialTokenResponse>, GestaltError> {
533        let request = ExchangeExternalCredentialRequest {
534            provider,
535            connection,
536            connection_id,
537            credential_subject_id,
538            actor_subject_id,
539            instance,
540            credential_json,
541            auth,
542            ..Default::default()
543        };
544        let mut tonic_request =
545            tonic::Request::new(to_wire_exchange_external_credential_request(request));
546        if let Some(timeout) = self.timeout {
547            tonic_request.set_timeout(timeout);
548        }
549        let response = from_wire_exchange_external_credential_response(
550            self.inner
551                .exchange_credential(tonic_request)
552                .await?
553                .into_inner(),
554        );
555        Ok(response.token_response)
556    }
557
558    /// Calls `gestalt.provider.v1.ExternalCredentials.ExchangeCredential` with the full request and response messages.
559    pub async fn exchange_credential_raw(
560        &mut self,
561        request: ExchangeExternalCredentialRequest,
562    ) -> Result<ExchangeExternalCredentialResponse, GestaltError> {
563        let mut tonic_request =
564            tonic::Request::new(to_wire_exchange_external_credential_request(request));
565        if let Some(timeout) = self.timeout {
566            tonic_request.set_timeout(timeout);
567        }
568        let response = self.inner.exchange_credential(tonic_request).await?;
569        Ok(from_wire_exchange_external_credential_response(
570            response.into_inner(),
571        ))
572    }
573}