google_cloud_kms_v1/client.rs
1// Copyright 2025 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14//
15// Code generated by sidekick. DO NOT EDIT.
16#![allow(rustdoc::bare_urls)]
17#![allow(rustdoc::broken_intra_doc_links)]
18#![allow(rustdoc::invalid_html_tags)]
19#![allow(rustdoc::redundant_explicit_links)]
20
21/// Implements a client for the Cloud Key Management Service (KMS) API.
22///
23/// # Example
24/// ```
25/// # use google_cloud_kms_v1::client::Autokey;
26/// use google_cloud_gax::paginator::ItemPaginator as _;
27/// async fn sample(
28/// parent: &str,
29/// ) -> anyhow::Result<()> {
30/// let client = Autokey::builder().build().await?;
31/// let mut list = client.list_key_handles()
32/// .set_parent(parent)
33/// .by_item();
34/// while let Some(item) = list.next().await.transpose()? {
35/// println!("{:?}", item);
36/// }
37/// Ok(())
38/// }
39/// ```
40///
41/// # Service Description
42///
43/// Provides interfaces for using [Cloud KMS
44/// Autokey](https://cloud.google.com/kms/help/autokey) to provision new
45/// [CryptoKeys][google.cloud.kms.v1.CryptoKey], ready for Customer Managed
46/// Encryption Key (CMEK) use, on-demand. To support certain client tooling, this
47/// feature is modeled around a [KeyHandle][google.cloud.kms.v1.KeyHandle]
48/// resource: creating a [KeyHandle][google.cloud.kms.v1.KeyHandle] in a resource
49/// project and given location triggers Cloud KMS Autokey to provision a
50/// [CryptoKey][google.cloud.kms.v1.CryptoKey] in the configured key project and
51/// the same location.
52///
53/// Prior to use in a given resource project,
54/// [UpdateAutokeyConfig][google.cloud.kms.v1.AutokeyAdmin.UpdateAutokeyConfig]
55/// should have been called on an ancestor folder, setting the key project where
56/// Cloud KMS Autokey should create new
57/// [CryptoKeys][google.cloud.kms.v1.CryptoKey]. See documentation for additional
58/// prerequisites. To check what key project, if any, is currently configured on
59/// a resource project's ancestor folder, see
60/// [ShowEffectiveAutokeyConfig][google.cloud.kms.v1.AutokeyAdmin.ShowEffectiveAutokeyConfig].
61///
62/// [google.cloud.kms.v1.AutokeyAdmin.ShowEffectiveAutokeyConfig]: crate::client::AutokeyAdmin::show_effective_autokey_config
63/// [google.cloud.kms.v1.AutokeyAdmin.UpdateAutokeyConfig]: crate::client::AutokeyAdmin::update_autokey_config
64/// [google.cloud.kms.v1.CryptoKey]: crate::model::CryptoKey
65/// [google.cloud.kms.v1.KeyHandle]: crate::model::KeyHandle
66///
67/// # Configuration
68///
69/// To configure `Autokey` use the `with_*` methods in the type returned
70/// by [builder()][Autokey::builder]. The default configuration should
71/// work for most applications. Common configuration changes include
72///
73/// * [with_endpoint()]: by default this client uses the global default endpoint
74/// (`https://cloudkms.googleapis.com`). Applications using regional
75/// endpoints or running in restricted networks (e.g. a network configured
76/// with [Private Google Access with VPC Service Controls]) may want to
77/// override this default.
78/// * [with_credentials()]: by default this client uses
79/// [Application Default Credentials]. Applications using custom
80/// authentication may need to override this default.
81///
82/// [with_endpoint()]: super::builder::autokey::ClientBuilder::with_endpoint
83/// [with_credentials()]: super::builder::autokey::ClientBuilder::with_credentials
84/// [Private Google Access with VPC Service Controls]: https://cloud.google.com/vpc-service-controls/docs/private-connectivity
85/// [Application Default Credentials]: https://cloud.google.com/docs/authentication#adc
86///
87/// # Pooling and Cloning
88///
89/// `Autokey` holds a connection pool internally, it is advised to
90/// create one and reuse it. You do not need to wrap `Autokey` in
91/// an [Rc](std::rc::Rc) or [Arc](std::sync::Arc) to reuse it, because it
92/// already uses an `Arc` internally.
93#[derive(Clone, Debug)]
94pub struct Autokey {
95 inner: std::sync::Arc<dyn super::stub::dynamic::Autokey>,
96}
97
98impl Autokey {
99 /// Returns a builder for [Autokey].
100 ///
101 /// ```
102 /// # async fn sample() -> google_cloud_gax::client_builder::Result<()> {
103 /// # use google_cloud_kms_v1::client::Autokey;
104 /// let client = Autokey::builder().build().await?;
105 /// # Ok(()) }
106 /// ```
107 pub fn builder() -> super::builder::autokey::ClientBuilder {
108 crate::new_client_builder(super::builder::autokey::client::Factory)
109 }
110
111 /// Creates a new client from the provided stub.
112 ///
113 /// The most common case for calling this function is in tests mocking the
114 /// client's behavior.
115 pub fn from_stub<T>(stub: impl Into<std::sync::Arc<T>>) -> Self
116 where
117 T: super::stub::Autokey + 'static,
118 {
119 Self { inner: stub.into() }
120 }
121
122 pub(crate) async fn new(
123 config: gaxi::options::ClientConfig,
124 ) -> crate::ClientBuilderResult<Self> {
125 let inner = Self::build_inner(config).await?;
126 Ok(Self { inner })
127 }
128
129 async fn build_inner(
130 conf: gaxi::options::ClientConfig,
131 ) -> crate::ClientBuilderResult<std::sync::Arc<dyn super::stub::dynamic::Autokey>> {
132 if gaxi::options::tracing_enabled(&conf) {
133 return Ok(std::sync::Arc::new(Self::build_with_tracing(conf).await?));
134 }
135 Ok(std::sync::Arc::new(Self::build_transport(conf).await?))
136 }
137
138 async fn build_transport(
139 conf: gaxi::options::ClientConfig,
140 ) -> crate::ClientBuilderResult<impl super::stub::Autokey> {
141 super::transport::Autokey::new(conf).await
142 }
143
144 async fn build_with_tracing(
145 conf: gaxi::options::ClientConfig,
146 ) -> crate::ClientBuilderResult<impl super::stub::Autokey> {
147 Self::build_transport(conf)
148 .await
149 .map(super::tracing::Autokey::new)
150 }
151
152 /// Creates a new [KeyHandle][google.cloud.kms.v1.KeyHandle], triggering the
153 /// provisioning of a new [CryptoKey][google.cloud.kms.v1.CryptoKey] for CMEK
154 /// use with the given resource type in the configured key project and the same
155 /// location. [GetOperation][google.longrunning.Operations.GetOperation] should
156 /// be used to resolve the resulting long-running operation and get the
157 /// resulting [KeyHandle][google.cloud.kms.v1.KeyHandle] and
158 /// [CryptoKey][google.cloud.kms.v1.CryptoKey].
159 ///
160 /// [google.cloud.kms.v1.CryptoKey]: crate::model::CryptoKey
161 /// [google.cloud.kms.v1.KeyHandle]: crate::model::KeyHandle
162 ///
163 /// # Long running operations
164 ///
165 /// This method is used to start, and/or poll a [long-running Operation].
166 /// The [Working with long-running operations] chapter in the [user guide]
167 /// covers these operations in detail.
168 ///
169 /// [long-running operation]: https://google.aip.dev/151
170 /// [user guide]: https://googleapis.github.io/google-cloud-rust/
171 /// [working with long-running operations]: https://googleapis.github.io/google-cloud-rust/working_with_long_running_operations.html
172 ///
173 /// # Example
174 /// ```
175 /// # use google_cloud_kms_v1::client::Autokey;
176 /// use google_cloud_lro::Poller;
177 /// use google_cloud_kms_v1::model::KeyHandle;
178 /// use google_cloud_kms_v1::Result;
179 /// async fn sample(
180 /// client: &Autokey, parent: &str
181 /// ) -> Result<()> {
182 /// let response = client.create_key_handle()
183 /// .set_parent(parent)
184 /// .set_key_handle(
185 /// KeyHandle::new()/* set fields */
186 /// )
187 /// .poller().until_done().await?;
188 /// println!("response {:?}", response);
189 /// Ok(())
190 /// }
191 /// ```
192 pub fn create_key_handle(&self) -> super::builder::autokey::CreateKeyHandle {
193 super::builder::autokey::CreateKeyHandle::new(self.inner.clone())
194 }
195
196 /// Returns the [KeyHandle][google.cloud.kms.v1.KeyHandle].
197 ///
198 /// [google.cloud.kms.v1.KeyHandle]: crate::model::KeyHandle
199 ///
200 /// # Example
201 /// ```
202 /// # use google_cloud_kms_v1::client::Autokey;
203 /// use google_cloud_kms_v1::Result;
204 /// async fn sample(
205 /// client: &Autokey, project_id: &str, location_id: &str, key_handle_id: &str
206 /// ) -> Result<()> {
207 /// let response = client.get_key_handle()
208 /// .set_name(format!("projects/{project_id}/locations/{location_id}/keyHandles/{key_handle_id}"))
209 /// .send().await?;
210 /// println!("response {:?}", response);
211 /// Ok(())
212 /// }
213 /// ```
214 pub fn get_key_handle(&self) -> super::builder::autokey::GetKeyHandle {
215 super::builder::autokey::GetKeyHandle::new(self.inner.clone())
216 }
217
218 /// Lists [KeyHandles][google.cloud.kms.v1.KeyHandle].
219 ///
220 /// [google.cloud.kms.v1.KeyHandle]: crate::model::KeyHandle
221 ///
222 /// # Example
223 /// ```
224 /// # use google_cloud_kms_v1::client::Autokey;
225 /// use google_cloud_gax::paginator::ItemPaginator as _;
226 /// use google_cloud_kms_v1::Result;
227 /// async fn sample(
228 /// client: &Autokey, parent: &str
229 /// ) -> Result<()> {
230 /// let mut list = client.list_key_handles()
231 /// .set_parent(parent)
232 /// .by_item();
233 /// while let Some(item) = list.next().await.transpose()? {
234 /// println!("{:?}", item);
235 /// }
236 /// Ok(())
237 /// }
238 /// ```
239 pub fn list_key_handles(&self) -> super::builder::autokey::ListKeyHandles {
240 super::builder::autokey::ListKeyHandles::new(self.inner.clone())
241 }
242
243 /// Lists information about the supported locations for this service.
244 ///
245 /// This method lists locations based on the resource scope provided in
246 /// the [ListLocationsRequest.name][google.cloud.location.ListLocationsRequest.name] field: *
247 /// **Global locations**: If `name` is empty, the method lists the
248 /// public locations available to all projects. * **Project-specific
249 /// locations**: If `name` follows the format
250 /// `projects/{project}`, the method lists locations visible to that
251 /// specific project. This includes public, private, or other
252 /// project-specific locations enabled for the project.
253 ///
254 /// For gRPC and client library implementations, the resource name is
255 /// passed as the `name` field. For direct service calls, the resource
256 /// name is
257 /// incorporated into the request path based on the specific service
258 /// implementation and version.
259 ///
260 /// [google.cloud.location.ListLocationsRequest.name]: google_cloud_location::model::ListLocationsRequest::name
261 ///
262 /// # Example
263 /// ```
264 /// # use google_cloud_kms_v1::client::Autokey;
265 /// use google_cloud_gax::paginator::ItemPaginator as _;
266 /// use google_cloud_kms_v1::Result;
267 /// async fn sample(
268 /// client: &Autokey
269 /// ) -> Result<()> {
270 /// let mut list = client.list_locations()
271 /// /* set fields */
272 /// .by_item();
273 /// while let Some(item) = list.next().await.transpose()? {
274 /// println!("{:?}", item);
275 /// }
276 /// Ok(())
277 /// }
278 /// ```
279 pub fn list_locations(&self) -> super::builder::autokey::ListLocations {
280 super::builder::autokey::ListLocations::new(self.inner.clone())
281 }
282
283 /// Gets information about a location.
284 ///
285 /// # Example
286 /// ```
287 /// # use google_cloud_kms_v1::client::Autokey;
288 /// use google_cloud_kms_v1::Result;
289 /// async fn sample(
290 /// client: &Autokey
291 /// ) -> Result<()> {
292 /// let response = client.get_location()
293 /// /* set fields */
294 /// .send().await?;
295 /// println!("response {:?}", response);
296 /// Ok(())
297 /// }
298 /// ```
299 pub fn get_location(&self) -> super::builder::autokey::GetLocation {
300 super::builder::autokey::GetLocation::new(self.inner.clone())
301 }
302
303 /// Sets the access control policy on the specified resource. Replaces
304 /// any existing policy.
305 ///
306 /// Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`
307 /// errors.
308 ///
309 /// # Example
310 /// ```
311 /// # use google_cloud_kms_v1::client::Autokey;
312 /// use google_cloud_kms_v1::Result;
313 /// async fn sample(
314 /// client: &Autokey
315 /// ) -> Result<()> {
316 /// let response = client.set_iam_policy()
317 /// /* set fields */
318 /// .send().await?;
319 /// println!("response {:?}", response);
320 /// Ok(())
321 /// }
322 /// ```
323 pub fn set_iam_policy(&self) -> super::builder::autokey::SetIamPolicy {
324 super::builder::autokey::SetIamPolicy::new(self.inner.clone())
325 }
326
327 /// Gets the access control policy for a resource. Returns an empty policy
328 /// if the resource exists and does not have a policy set.
329 ///
330 /// # Example
331 /// ```
332 /// # use google_cloud_kms_v1::client::Autokey;
333 /// use google_cloud_kms_v1::Result;
334 /// async fn sample(
335 /// client: &Autokey
336 /// ) -> Result<()> {
337 /// let response = client.get_iam_policy()
338 /// /* set fields */
339 /// .send().await?;
340 /// println!("response {:?}", response);
341 /// Ok(())
342 /// }
343 /// ```
344 pub fn get_iam_policy(&self) -> super::builder::autokey::GetIamPolicy {
345 super::builder::autokey::GetIamPolicy::new(self.inner.clone())
346 }
347
348 /// Returns permissions that a caller has on the specified resource. If the
349 /// resource does not exist, this will return an empty set of
350 /// permissions, not a `NOT_FOUND` error.
351 ///
352 /// Note: This operation is designed to be used for building
353 /// permission-aware UIs and command-line tools, not for authorization
354 /// checking. This operation may "fail open" without warning.
355 ///
356 /// # Example
357 /// ```
358 /// # use google_cloud_kms_v1::client::Autokey;
359 /// use google_cloud_kms_v1::Result;
360 /// async fn sample(
361 /// client: &Autokey
362 /// ) -> Result<()> {
363 /// let response = client.test_iam_permissions()
364 /// /* set fields */
365 /// .send().await?;
366 /// println!("response {:?}", response);
367 /// Ok(())
368 /// }
369 /// ```
370 pub fn test_iam_permissions(&self) -> super::builder::autokey::TestIamPermissions {
371 super::builder::autokey::TestIamPermissions::new(self.inner.clone())
372 }
373
374 /// Provides the [Operations][google.longrunning.Operations] service functionality in this service.
375 ///
376 /// [google.longrunning.Operations]: google-cloud-longrunning::client::Operations
377 ///
378 /// # Example
379 /// ```
380 /// # use google_cloud_kms_v1::client::Autokey;
381 /// use google_cloud_kms_v1::Result;
382 /// async fn sample(
383 /// client: &Autokey
384 /// ) -> Result<()> {
385 /// let response = client.get_operation()
386 /// /* set fields */
387 /// .send().await?;
388 /// println!("response {:?}", response);
389 /// Ok(())
390 /// }
391 /// ```
392 pub fn get_operation(&self) -> super::builder::autokey::GetOperation {
393 super::builder::autokey::GetOperation::new(self.inner.clone())
394 }
395}
396
397/// Implements a client for the Cloud Key Management Service (KMS) API.
398///
399/// # Example
400/// ```
401/// # use google_cloud_kms_v1::client::AutokeyAdmin;
402/// async fn sample(
403/// folder_id: &str,
404/// ) -> anyhow::Result<()> {
405/// let client = AutokeyAdmin::builder().build().await?;
406/// let response = client.get_autokey_config()
407/// .set_name(format!("folders/{folder_id}/autokeyConfig"))
408/// .send().await?;
409/// println!("response {:?}", response);
410/// Ok(())
411/// }
412/// ```
413///
414/// # Service Description
415///
416/// Provides interfaces for managing [Cloud KMS
417/// Autokey](https://cloud.google.com/kms/help/autokey) folder-level or
418/// project-level configurations. A configuration is inherited by all descendent
419/// folders and projects. A configuration at a folder or project overrides any
420/// other configurations in its ancestry. Setting a configuration on a folder is
421/// a prerequisite for Cloud KMS Autokey, so that users working in a descendant
422/// project can request provisioned [CryptoKeys][google.cloud.kms.v1.CryptoKey],
423/// ready for Customer Managed Encryption Key (CMEK) use, on-demand when using
424/// the dedicated key project mode. This is not required when using the delegated
425/// key management mode for same-project keys.
426///
427/// [google.cloud.kms.v1.CryptoKey]: crate::model::CryptoKey
428///
429/// # Configuration
430///
431/// To configure `AutokeyAdmin` use the `with_*` methods in the type returned
432/// by [builder()][AutokeyAdmin::builder]. The default configuration should
433/// work for most applications. Common configuration changes include
434///
435/// * [with_endpoint()]: by default this client uses the global default endpoint
436/// (`https://cloudkms.googleapis.com`). Applications using regional
437/// endpoints or running in restricted networks (e.g. a network configured
438/// with [Private Google Access with VPC Service Controls]) may want to
439/// override this default.
440/// * [with_credentials()]: by default this client uses
441/// [Application Default Credentials]. Applications using custom
442/// authentication may need to override this default.
443///
444/// [with_endpoint()]: super::builder::autokey_admin::ClientBuilder::with_endpoint
445/// [with_credentials()]: super::builder::autokey_admin::ClientBuilder::with_credentials
446/// [Private Google Access with VPC Service Controls]: https://cloud.google.com/vpc-service-controls/docs/private-connectivity
447/// [Application Default Credentials]: https://cloud.google.com/docs/authentication#adc
448///
449/// # Pooling and Cloning
450///
451/// `AutokeyAdmin` holds a connection pool internally, it is advised to
452/// create one and reuse it. You do not need to wrap `AutokeyAdmin` in
453/// an [Rc](std::rc::Rc) or [Arc](std::sync::Arc) to reuse it, because it
454/// already uses an `Arc` internally.
455#[derive(Clone, Debug)]
456pub struct AutokeyAdmin {
457 inner: std::sync::Arc<dyn super::stub::dynamic::AutokeyAdmin>,
458}
459
460impl AutokeyAdmin {
461 /// Returns a builder for [AutokeyAdmin].
462 ///
463 /// ```
464 /// # async fn sample() -> google_cloud_gax::client_builder::Result<()> {
465 /// # use google_cloud_kms_v1::client::AutokeyAdmin;
466 /// let client = AutokeyAdmin::builder().build().await?;
467 /// # Ok(()) }
468 /// ```
469 pub fn builder() -> super::builder::autokey_admin::ClientBuilder {
470 crate::new_client_builder(super::builder::autokey_admin::client::Factory)
471 }
472
473 /// Creates a new client from the provided stub.
474 ///
475 /// The most common case for calling this function is in tests mocking the
476 /// client's behavior.
477 pub fn from_stub<T>(stub: impl Into<std::sync::Arc<T>>) -> Self
478 where
479 T: super::stub::AutokeyAdmin + 'static,
480 {
481 Self { inner: stub.into() }
482 }
483
484 pub(crate) async fn new(
485 config: gaxi::options::ClientConfig,
486 ) -> crate::ClientBuilderResult<Self> {
487 let inner = Self::build_inner(config).await?;
488 Ok(Self { inner })
489 }
490
491 async fn build_inner(
492 conf: gaxi::options::ClientConfig,
493 ) -> crate::ClientBuilderResult<std::sync::Arc<dyn super::stub::dynamic::AutokeyAdmin>> {
494 if gaxi::options::tracing_enabled(&conf) {
495 return Ok(std::sync::Arc::new(Self::build_with_tracing(conf).await?));
496 }
497 Ok(std::sync::Arc::new(Self::build_transport(conf).await?))
498 }
499
500 async fn build_transport(
501 conf: gaxi::options::ClientConfig,
502 ) -> crate::ClientBuilderResult<impl super::stub::AutokeyAdmin> {
503 super::transport::AutokeyAdmin::new(conf).await
504 }
505
506 async fn build_with_tracing(
507 conf: gaxi::options::ClientConfig,
508 ) -> crate::ClientBuilderResult<impl super::stub::AutokeyAdmin> {
509 Self::build_transport(conf)
510 .await
511 .map(super::tracing::AutokeyAdmin::new)
512 }
513
514 /// Updates the [AutokeyConfig][google.cloud.kms.v1.AutokeyConfig] for a folder
515 /// or a project. The caller must have both `cloudkms.autokeyConfigs.update`
516 /// permission on the parent folder and `cloudkms.cryptoKeys.setIamPolicy`
517 /// permission on the provided key project. A
518 /// [KeyHandle][google.cloud.kms.v1.KeyHandle] creation in the folder's
519 /// descendant projects will use this configuration to determine where to
520 /// create the resulting [CryptoKey][google.cloud.kms.v1.CryptoKey].
521 ///
522 /// [google.cloud.kms.v1.AutokeyConfig]: crate::model::AutokeyConfig
523 /// [google.cloud.kms.v1.CryptoKey]: crate::model::CryptoKey
524 /// [google.cloud.kms.v1.KeyHandle]: crate::model::KeyHandle
525 ///
526 /// # Example
527 /// ```
528 /// # use google_cloud_kms_v1::client::AutokeyAdmin;
529 /// # extern crate wkt as google_cloud_wkt;
530 /// use google_cloud_wkt::FieldMask;
531 /// use google_cloud_kms_v1::model::AutokeyConfig;
532 /// use google_cloud_kms_v1::Result;
533 /// async fn sample(
534 /// client: &AutokeyAdmin, folder_id: &str
535 /// ) -> Result<()> {
536 /// let response = client.update_autokey_config()
537 /// .set_autokey_config(
538 /// AutokeyConfig::new().set_name(format!("folders/{folder_id}/autokeyConfig"))/* set fields */
539 /// )
540 /// .set_update_mask(FieldMask::default().set_paths(["updated.field.path1", "updated.field.path2"]))
541 /// .send().await?;
542 /// println!("response {:?}", response);
543 /// Ok(())
544 /// }
545 /// ```
546 pub fn update_autokey_config(&self) -> super::builder::autokey_admin::UpdateAutokeyConfig {
547 super::builder::autokey_admin::UpdateAutokeyConfig::new(self.inner.clone())
548 }
549
550 /// Returns the [AutokeyConfig][google.cloud.kms.v1.AutokeyConfig] for a folder
551 /// or project.
552 ///
553 /// [google.cloud.kms.v1.AutokeyConfig]: crate::model::AutokeyConfig
554 ///
555 /// # Example
556 /// ```
557 /// # use google_cloud_kms_v1::client::AutokeyAdmin;
558 /// use google_cloud_kms_v1::Result;
559 /// async fn sample(
560 /// client: &AutokeyAdmin, folder_id: &str
561 /// ) -> Result<()> {
562 /// let response = client.get_autokey_config()
563 /// .set_name(format!("folders/{folder_id}/autokeyConfig"))
564 /// .send().await?;
565 /// println!("response {:?}", response);
566 /// Ok(())
567 /// }
568 /// ```
569 pub fn get_autokey_config(&self) -> super::builder::autokey_admin::GetAutokeyConfig {
570 super::builder::autokey_admin::GetAutokeyConfig::new(self.inner.clone())
571 }
572
573 /// Returns the effective Cloud KMS Autokey configuration for a given project.
574 ///
575 /// # Example
576 /// ```
577 /// # use google_cloud_kms_v1::client::AutokeyAdmin;
578 /// use google_cloud_kms_v1::Result;
579 /// async fn sample(
580 /// client: &AutokeyAdmin
581 /// ) -> Result<()> {
582 /// let response = client.show_effective_autokey_config()
583 /// /* set fields */
584 /// .send().await?;
585 /// println!("response {:?}", response);
586 /// Ok(())
587 /// }
588 /// ```
589 pub fn show_effective_autokey_config(
590 &self,
591 ) -> super::builder::autokey_admin::ShowEffectiveAutokeyConfig {
592 super::builder::autokey_admin::ShowEffectiveAutokeyConfig::new(self.inner.clone())
593 }
594
595 /// Lists information about the supported locations for this service.
596 ///
597 /// This method lists locations based on the resource scope provided in
598 /// the [ListLocationsRequest.name][google.cloud.location.ListLocationsRequest.name] field: *
599 /// **Global locations**: If `name` is empty, the method lists the
600 /// public locations available to all projects. * **Project-specific
601 /// locations**: If `name` follows the format
602 /// `projects/{project}`, the method lists locations visible to that
603 /// specific project. This includes public, private, or other
604 /// project-specific locations enabled for the project.
605 ///
606 /// For gRPC and client library implementations, the resource name is
607 /// passed as the `name` field. For direct service calls, the resource
608 /// name is
609 /// incorporated into the request path based on the specific service
610 /// implementation and version.
611 ///
612 /// [google.cloud.location.ListLocationsRequest.name]: google_cloud_location::model::ListLocationsRequest::name
613 ///
614 /// # Example
615 /// ```
616 /// # use google_cloud_kms_v1::client::AutokeyAdmin;
617 /// use google_cloud_gax::paginator::ItemPaginator as _;
618 /// use google_cloud_kms_v1::Result;
619 /// async fn sample(
620 /// client: &AutokeyAdmin
621 /// ) -> Result<()> {
622 /// let mut list = client.list_locations()
623 /// /* set fields */
624 /// .by_item();
625 /// while let Some(item) = list.next().await.transpose()? {
626 /// println!("{:?}", item);
627 /// }
628 /// Ok(())
629 /// }
630 /// ```
631 pub fn list_locations(&self) -> super::builder::autokey_admin::ListLocations {
632 super::builder::autokey_admin::ListLocations::new(self.inner.clone())
633 }
634
635 /// Gets information about a location.
636 ///
637 /// # Example
638 /// ```
639 /// # use google_cloud_kms_v1::client::AutokeyAdmin;
640 /// use google_cloud_kms_v1::Result;
641 /// async fn sample(
642 /// client: &AutokeyAdmin
643 /// ) -> Result<()> {
644 /// let response = client.get_location()
645 /// /* set fields */
646 /// .send().await?;
647 /// println!("response {:?}", response);
648 /// Ok(())
649 /// }
650 /// ```
651 pub fn get_location(&self) -> super::builder::autokey_admin::GetLocation {
652 super::builder::autokey_admin::GetLocation::new(self.inner.clone())
653 }
654
655 /// Sets the access control policy on the specified resource. Replaces
656 /// any existing policy.
657 ///
658 /// Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`
659 /// errors.
660 ///
661 /// # Example
662 /// ```
663 /// # use google_cloud_kms_v1::client::AutokeyAdmin;
664 /// use google_cloud_kms_v1::Result;
665 /// async fn sample(
666 /// client: &AutokeyAdmin
667 /// ) -> Result<()> {
668 /// let response = client.set_iam_policy()
669 /// /* set fields */
670 /// .send().await?;
671 /// println!("response {:?}", response);
672 /// Ok(())
673 /// }
674 /// ```
675 pub fn set_iam_policy(&self) -> super::builder::autokey_admin::SetIamPolicy {
676 super::builder::autokey_admin::SetIamPolicy::new(self.inner.clone())
677 }
678
679 /// Gets the access control policy for a resource. Returns an empty policy
680 /// if the resource exists and does not have a policy set.
681 ///
682 /// # Example
683 /// ```
684 /// # use google_cloud_kms_v1::client::AutokeyAdmin;
685 /// use google_cloud_kms_v1::Result;
686 /// async fn sample(
687 /// client: &AutokeyAdmin
688 /// ) -> Result<()> {
689 /// let response = client.get_iam_policy()
690 /// /* set fields */
691 /// .send().await?;
692 /// println!("response {:?}", response);
693 /// Ok(())
694 /// }
695 /// ```
696 pub fn get_iam_policy(&self) -> super::builder::autokey_admin::GetIamPolicy {
697 super::builder::autokey_admin::GetIamPolicy::new(self.inner.clone())
698 }
699
700 /// Returns permissions that a caller has on the specified resource. If the
701 /// resource does not exist, this will return an empty set of
702 /// permissions, not a `NOT_FOUND` error.
703 ///
704 /// Note: This operation is designed to be used for building
705 /// permission-aware UIs and command-line tools, not for authorization
706 /// checking. This operation may "fail open" without warning.
707 ///
708 /// # Example
709 /// ```
710 /// # use google_cloud_kms_v1::client::AutokeyAdmin;
711 /// use google_cloud_kms_v1::Result;
712 /// async fn sample(
713 /// client: &AutokeyAdmin
714 /// ) -> Result<()> {
715 /// let response = client.test_iam_permissions()
716 /// /* set fields */
717 /// .send().await?;
718 /// println!("response {:?}", response);
719 /// Ok(())
720 /// }
721 /// ```
722 pub fn test_iam_permissions(&self) -> super::builder::autokey_admin::TestIamPermissions {
723 super::builder::autokey_admin::TestIamPermissions::new(self.inner.clone())
724 }
725
726 /// Provides the [Operations][google.longrunning.Operations] service functionality in this service.
727 ///
728 /// [google.longrunning.Operations]: google-cloud-longrunning::client::Operations
729 ///
730 /// # Example
731 /// ```
732 /// # use google_cloud_kms_v1::client::AutokeyAdmin;
733 /// use google_cloud_kms_v1::Result;
734 /// async fn sample(
735 /// client: &AutokeyAdmin
736 /// ) -> Result<()> {
737 /// let response = client.get_operation()
738 /// /* set fields */
739 /// .send().await?;
740 /// println!("response {:?}", response);
741 /// Ok(())
742 /// }
743 /// ```
744 pub fn get_operation(&self) -> super::builder::autokey_admin::GetOperation {
745 super::builder::autokey_admin::GetOperation::new(self.inner.clone())
746 }
747}
748
749/// Implements a client for the Cloud Key Management Service (KMS) API.
750///
751/// # Example
752/// ```
753/// # use google_cloud_kms_v1::client::EkmService;
754/// use google_cloud_gax::paginator::ItemPaginator as _;
755/// async fn sample(
756/// parent: &str,
757/// ) -> anyhow::Result<()> {
758/// let client = EkmService::builder().build().await?;
759/// let mut list = client.list_ekm_connections()
760/// .set_parent(parent)
761/// .by_item();
762/// while let Some(item) = list.next().await.transpose()? {
763/// println!("{:?}", item);
764/// }
765/// Ok(())
766/// }
767/// ```
768///
769/// # Service Description
770///
771/// Google Cloud Key Management EKM Service
772///
773/// Manages external cryptographic keys and operations using those keys.
774/// Implements a REST model with the following objects:
775///
776/// * [EkmConnection][google.cloud.kms.v1.EkmConnection]
777///
778/// [google.cloud.kms.v1.EkmConnection]: crate::model::EkmConnection
779///
780/// # Configuration
781///
782/// To configure `EkmService` use the `with_*` methods in the type returned
783/// by [builder()][EkmService::builder]. The default configuration should
784/// work for most applications. Common configuration changes include
785///
786/// * [with_endpoint()]: by default this client uses the global default endpoint
787/// (`https://cloudkms.googleapis.com`). Applications using regional
788/// endpoints or running in restricted networks (e.g. a network configured
789/// with [Private Google Access with VPC Service Controls]) may want to
790/// override this default.
791/// * [with_credentials()]: by default this client uses
792/// [Application Default Credentials]. Applications using custom
793/// authentication may need to override this default.
794///
795/// [with_endpoint()]: super::builder::ekm_service::ClientBuilder::with_endpoint
796/// [with_credentials()]: super::builder::ekm_service::ClientBuilder::with_credentials
797/// [Private Google Access with VPC Service Controls]: https://cloud.google.com/vpc-service-controls/docs/private-connectivity
798/// [Application Default Credentials]: https://cloud.google.com/docs/authentication#adc
799///
800/// # Pooling and Cloning
801///
802/// `EkmService` holds a connection pool internally, it is advised to
803/// create one and reuse it. You do not need to wrap `EkmService` in
804/// an [Rc](std::rc::Rc) or [Arc](std::sync::Arc) to reuse it, because it
805/// already uses an `Arc` internally.
806#[derive(Clone, Debug)]
807pub struct EkmService {
808 inner: std::sync::Arc<dyn super::stub::dynamic::EkmService>,
809}
810
811impl EkmService {
812 /// Returns a builder for [EkmService].
813 ///
814 /// ```
815 /// # async fn sample() -> google_cloud_gax::client_builder::Result<()> {
816 /// # use google_cloud_kms_v1::client::EkmService;
817 /// let client = EkmService::builder().build().await?;
818 /// # Ok(()) }
819 /// ```
820 pub fn builder() -> super::builder::ekm_service::ClientBuilder {
821 crate::new_client_builder(super::builder::ekm_service::client::Factory)
822 }
823
824 /// Creates a new client from the provided stub.
825 ///
826 /// The most common case for calling this function is in tests mocking the
827 /// client's behavior.
828 pub fn from_stub<T>(stub: impl Into<std::sync::Arc<T>>) -> Self
829 where
830 T: super::stub::EkmService + 'static,
831 {
832 Self { inner: stub.into() }
833 }
834
835 pub(crate) async fn new(
836 config: gaxi::options::ClientConfig,
837 ) -> crate::ClientBuilderResult<Self> {
838 let inner = Self::build_inner(config).await?;
839 Ok(Self { inner })
840 }
841
842 async fn build_inner(
843 conf: gaxi::options::ClientConfig,
844 ) -> crate::ClientBuilderResult<std::sync::Arc<dyn super::stub::dynamic::EkmService>> {
845 if gaxi::options::tracing_enabled(&conf) {
846 return Ok(std::sync::Arc::new(Self::build_with_tracing(conf).await?));
847 }
848 Ok(std::sync::Arc::new(Self::build_transport(conf).await?))
849 }
850
851 async fn build_transport(
852 conf: gaxi::options::ClientConfig,
853 ) -> crate::ClientBuilderResult<impl super::stub::EkmService> {
854 super::transport::EkmService::new(conf).await
855 }
856
857 async fn build_with_tracing(
858 conf: gaxi::options::ClientConfig,
859 ) -> crate::ClientBuilderResult<impl super::stub::EkmService> {
860 Self::build_transport(conf)
861 .await
862 .map(super::tracing::EkmService::new)
863 }
864
865 /// Lists [EkmConnections][google.cloud.kms.v1.EkmConnection].
866 ///
867 /// [google.cloud.kms.v1.EkmConnection]: crate::model::EkmConnection
868 ///
869 /// # Example
870 /// ```
871 /// # use google_cloud_kms_v1::client::EkmService;
872 /// use google_cloud_gax::paginator::ItemPaginator as _;
873 /// use google_cloud_kms_v1::Result;
874 /// async fn sample(
875 /// client: &EkmService, parent: &str
876 /// ) -> Result<()> {
877 /// let mut list = client.list_ekm_connections()
878 /// .set_parent(parent)
879 /// .by_item();
880 /// while let Some(item) = list.next().await.transpose()? {
881 /// println!("{:?}", item);
882 /// }
883 /// Ok(())
884 /// }
885 /// ```
886 pub fn list_ekm_connections(&self) -> super::builder::ekm_service::ListEkmConnections {
887 super::builder::ekm_service::ListEkmConnections::new(self.inner.clone())
888 }
889
890 /// Returns metadata for a given
891 /// [EkmConnection][google.cloud.kms.v1.EkmConnection].
892 ///
893 /// [google.cloud.kms.v1.EkmConnection]: crate::model::EkmConnection
894 ///
895 /// # Example
896 /// ```
897 /// # use google_cloud_kms_v1::client::EkmService;
898 /// use google_cloud_kms_v1::Result;
899 /// async fn sample(
900 /// client: &EkmService, project_id: &str, location_id: &str, ekm_connection_id: &str
901 /// ) -> Result<()> {
902 /// let response = client.get_ekm_connection()
903 /// .set_name(format!("projects/{project_id}/locations/{location_id}/ekmConnections/{ekm_connection_id}"))
904 /// .send().await?;
905 /// println!("response {:?}", response);
906 /// Ok(())
907 /// }
908 /// ```
909 pub fn get_ekm_connection(&self) -> super::builder::ekm_service::GetEkmConnection {
910 super::builder::ekm_service::GetEkmConnection::new(self.inner.clone())
911 }
912
913 /// Creates a new [EkmConnection][google.cloud.kms.v1.EkmConnection] in a given
914 /// Project and Location.
915 ///
916 /// [google.cloud.kms.v1.EkmConnection]: crate::model::EkmConnection
917 ///
918 /// # Example
919 /// ```
920 /// # use google_cloud_kms_v1::client::EkmService;
921 /// use google_cloud_kms_v1::model::EkmConnection;
922 /// use google_cloud_kms_v1::Result;
923 /// async fn sample(
924 /// client: &EkmService, parent: &str
925 /// ) -> Result<()> {
926 /// let response = client.create_ekm_connection()
927 /// .set_parent(parent)
928 /// .set_ekm_connection(
929 /// EkmConnection::new()/* set fields */
930 /// )
931 /// .send().await?;
932 /// println!("response {:?}", response);
933 /// Ok(())
934 /// }
935 /// ```
936 pub fn create_ekm_connection(&self) -> super::builder::ekm_service::CreateEkmConnection {
937 super::builder::ekm_service::CreateEkmConnection::new(self.inner.clone())
938 }
939
940 /// Updates an [EkmConnection][google.cloud.kms.v1.EkmConnection]'s metadata.
941 ///
942 /// [google.cloud.kms.v1.EkmConnection]: crate::model::EkmConnection
943 ///
944 /// # Example
945 /// ```
946 /// # use google_cloud_kms_v1::client::EkmService;
947 /// # extern crate wkt as google_cloud_wkt;
948 /// use google_cloud_wkt::FieldMask;
949 /// use google_cloud_kms_v1::model::EkmConnection;
950 /// use google_cloud_kms_v1::Result;
951 /// async fn sample(
952 /// client: &EkmService, project_id: &str, location_id: &str, ekm_connection_id: &str
953 /// ) -> Result<()> {
954 /// let response = client.update_ekm_connection()
955 /// .set_ekm_connection(
956 /// EkmConnection::new().set_name(format!("projects/{project_id}/locations/{location_id}/ekmConnections/{ekm_connection_id}"))/* set fields */
957 /// )
958 /// .set_update_mask(FieldMask::default().set_paths(["updated.field.path1", "updated.field.path2"]))
959 /// .send().await?;
960 /// println!("response {:?}", response);
961 /// Ok(())
962 /// }
963 /// ```
964 pub fn update_ekm_connection(&self) -> super::builder::ekm_service::UpdateEkmConnection {
965 super::builder::ekm_service::UpdateEkmConnection::new(self.inner.clone())
966 }
967
968 /// Returns the [EkmConfig][google.cloud.kms.v1.EkmConfig] singleton resource
969 /// for a given project and location.
970 ///
971 /// [google.cloud.kms.v1.EkmConfig]: crate::model::EkmConfig
972 ///
973 /// # Example
974 /// ```
975 /// # use google_cloud_kms_v1::client::EkmService;
976 /// use google_cloud_kms_v1::Result;
977 /// async fn sample(
978 /// client: &EkmService, project_id: &str, location_id: &str
979 /// ) -> Result<()> {
980 /// let response = client.get_ekm_config()
981 /// .set_name(format!("projects/{project_id}/locations/{location_id}/ekmConfig"))
982 /// .send().await?;
983 /// println!("response {:?}", response);
984 /// Ok(())
985 /// }
986 /// ```
987 pub fn get_ekm_config(&self) -> super::builder::ekm_service::GetEkmConfig {
988 super::builder::ekm_service::GetEkmConfig::new(self.inner.clone())
989 }
990
991 /// Updates the [EkmConfig][google.cloud.kms.v1.EkmConfig] singleton resource
992 /// for a given project and location.
993 ///
994 /// [google.cloud.kms.v1.EkmConfig]: crate::model::EkmConfig
995 ///
996 /// # Example
997 /// ```
998 /// # use google_cloud_kms_v1::client::EkmService;
999 /// # extern crate wkt as google_cloud_wkt;
1000 /// use google_cloud_wkt::FieldMask;
1001 /// use google_cloud_kms_v1::model::EkmConfig;
1002 /// use google_cloud_kms_v1::Result;
1003 /// async fn sample(
1004 /// client: &EkmService, project_id: &str, location_id: &str
1005 /// ) -> Result<()> {
1006 /// let response = client.update_ekm_config()
1007 /// .set_ekm_config(
1008 /// EkmConfig::new().set_name(format!("projects/{project_id}/locations/{location_id}/ekmConfig"))/* set fields */
1009 /// )
1010 /// .set_update_mask(FieldMask::default().set_paths(["updated.field.path1", "updated.field.path2"]))
1011 /// .send().await?;
1012 /// println!("response {:?}", response);
1013 /// Ok(())
1014 /// }
1015 /// ```
1016 pub fn update_ekm_config(&self) -> super::builder::ekm_service::UpdateEkmConfig {
1017 super::builder::ekm_service::UpdateEkmConfig::new(self.inner.clone())
1018 }
1019
1020 /// Verifies that Cloud KMS can successfully connect to the external key
1021 /// manager specified by an [EkmConnection][google.cloud.kms.v1.EkmConnection].
1022 /// If there is an error connecting to the EKM, this method returns a
1023 /// FAILED_PRECONDITION status containing structured information as described
1024 /// at <https://cloud.google.com/kms/docs/reference/ekm_errors>.
1025 ///
1026 /// [google.cloud.kms.v1.EkmConnection]: crate::model::EkmConnection
1027 ///
1028 /// # Example
1029 /// ```
1030 /// # use google_cloud_kms_v1::client::EkmService;
1031 /// use google_cloud_kms_v1::Result;
1032 /// async fn sample(
1033 /// client: &EkmService
1034 /// ) -> Result<()> {
1035 /// let response = client.verify_connectivity()
1036 /// /* set fields */
1037 /// .send().await?;
1038 /// println!("response {:?}", response);
1039 /// Ok(())
1040 /// }
1041 /// ```
1042 pub fn verify_connectivity(&self) -> super::builder::ekm_service::VerifyConnectivity {
1043 super::builder::ekm_service::VerifyConnectivity::new(self.inner.clone())
1044 }
1045
1046 /// Lists information about the supported locations for this service.
1047 ///
1048 /// This method lists locations based on the resource scope provided in
1049 /// the [ListLocationsRequest.name][google.cloud.location.ListLocationsRequest.name] field: *
1050 /// **Global locations**: If `name` is empty, the method lists the
1051 /// public locations available to all projects. * **Project-specific
1052 /// locations**: If `name` follows the format
1053 /// `projects/{project}`, the method lists locations visible to that
1054 /// specific project. This includes public, private, or other
1055 /// project-specific locations enabled for the project.
1056 ///
1057 /// For gRPC and client library implementations, the resource name is
1058 /// passed as the `name` field. For direct service calls, the resource
1059 /// name is
1060 /// incorporated into the request path based on the specific service
1061 /// implementation and version.
1062 ///
1063 /// [google.cloud.location.ListLocationsRequest.name]: google_cloud_location::model::ListLocationsRequest::name
1064 ///
1065 /// # Example
1066 /// ```
1067 /// # use google_cloud_kms_v1::client::EkmService;
1068 /// use google_cloud_gax::paginator::ItemPaginator as _;
1069 /// use google_cloud_kms_v1::Result;
1070 /// async fn sample(
1071 /// client: &EkmService
1072 /// ) -> Result<()> {
1073 /// let mut list = client.list_locations()
1074 /// /* set fields */
1075 /// .by_item();
1076 /// while let Some(item) = list.next().await.transpose()? {
1077 /// println!("{:?}", item);
1078 /// }
1079 /// Ok(())
1080 /// }
1081 /// ```
1082 pub fn list_locations(&self) -> super::builder::ekm_service::ListLocations {
1083 super::builder::ekm_service::ListLocations::new(self.inner.clone())
1084 }
1085
1086 /// Gets information about a location.
1087 ///
1088 /// # Example
1089 /// ```
1090 /// # use google_cloud_kms_v1::client::EkmService;
1091 /// use google_cloud_kms_v1::Result;
1092 /// async fn sample(
1093 /// client: &EkmService
1094 /// ) -> Result<()> {
1095 /// let response = client.get_location()
1096 /// /* set fields */
1097 /// .send().await?;
1098 /// println!("response {:?}", response);
1099 /// Ok(())
1100 /// }
1101 /// ```
1102 pub fn get_location(&self) -> super::builder::ekm_service::GetLocation {
1103 super::builder::ekm_service::GetLocation::new(self.inner.clone())
1104 }
1105
1106 /// Sets the access control policy on the specified resource. Replaces
1107 /// any existing policy.
1108 ///
1109 /// Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`
1110 /// errors.
1111 ///
1112 /// # Example
1113 /// ```
1114 /// # use google_cloud_kms_v1::client::EkmService;
1115 /// use google_cloud_kms_v1::Result;
1116 /// async fn sample(
1117 /// client: &EkmService
1118 /// ) -> Result<()> {
1119 /// let response = client.set_iam_policy()
1120 /// /* set fields */
1121 /// .send().await?;
1122 /// println!("response {:?}", response);
1123 /// Ok(())
1124 /// }
1125 /// ```
1126 pub fn set_iam_policy(&self) -> super::builder::ekm_service::SetIamPolicy {
1127 super::builder::ekm_service::SetIamPolicy::new(self.inner.clone())
1128 }
1129
1130 /// Gets the access control policy for a resource. Returns an empty policy
1131 /// if the resource exists and does not have a policy set.
1132 ///
1133 /// # Example
1134 /// ```
1135 /// # use google_cloud_kms_v1::client::EkmService;
1136 /// use google_cloud_kms_v1::Result;
1137 /// async fn sample(
1138 /// client: &EkmService
1139 /// ) -> Result<()> {
1140 /// let response = client.get_iam_policy()
1141 /// /* set fields */
1142 /// .send().await?;
1143 /// println!("response {:?}", response);
1144 /// Ok(())
1145 /// }
1146 /// ```
1147 pub fn get_iam_policy(&self) -> super::builder::ekm_service::GetIamPolicy {
1148 super::builder::ekm_service::GetIamPolicy::new(self.inner.clone())
1149 }
1150
1151 /// Returns permissions that a caller has on the specified resource. If the
1152 /// resource does not exist, this will return an empty set of
1153 /// permissions, not a `NOT_FOUND` error.
1154 ///
1155 /// Note: This operation is designed to be used for building
1156 /// permission-aware UIs and command-line tools, not for authorization
1157 /// checking. This operation may "fail open" without warning.
1158 ///
1159 /// # Example
1160 /// ```
1161 /// # use google_cloud_kms_v1::client::EkmService;
1162 /// use google_cloud_kms_v1::Result;
1163 /// async fn sample(
1164 /// client: &EkmService
1165 /// ) -> Result<()> {
1166 /// let response = client.test_iam_permissions()
1167 /// /* set fields */
1168 /// .send().await?;
1169 /// println!("response {:?}", response);
1170 /// Ok(())
1171 /// }
1172 /// ```
1173 pub fn test_iam_permissions(&self) -> super::builder::ekm_service::TestIamPermissions {
1174 super::builder::ekm_service::TestIamPermissions::new(self.inner.clone())
1175 }
1176
1177 /// Provides the [Operations][google.longrunning.Operations] service functionality in this service.
1178 ///
1179 /// [google.longrunning.Operations]: google-cloud-longrunning::client::Operations
1180 ///
1181 /// # Example
1182 /// ```
1183 /// # use google_cloud_kms_v1::client::EkmService;
1184 /// use google_cloud_kms_v1::Result;
1185 /// async fn sample(
1186 /// client: &EkmService
1187 /// ) -> Result<()> {
1188 /// let response = client.get_operation()
1189 /// /* set fields */
1190 /// .send().await?;
1191 /// println!("response {:?}", response);
1192 /// Ok(())
1193 /// }
1194 /// ```
1195 pub fn get_operation(&self) -> super::builder::ekm_service::GetOperation {
1196 super::builder::ekm_service::GetOperation::new(self.inner.clone())
1197 }
1198}
1199
1200/// Implements a client for the Cloud Key Management Service (KMS) API.
1201///
1202/// # Example
1203/// ```
1204/// # use google_cloud_kms_v1::client::HsmManagement;
1205/// use google_cloud_gax::paginator::ItemPaginator as _;
1206/// async fn sample(
1207/// parent: &str,
1208/// ) -> anyhow::Result<()> {
1209/// let client = HsmManagement::builder().build().await?;
1210/// let mut list = client.list_single_tenant_hsm_instances()
1211/// .set_parent(parent)
1212/// .by_item();
1213/// while let Some(item) = list.next().await.transpose()? {
1214/// println!("{:?}", item);
1215/// }
1216/// Ok(())
1217/// }
1218/// ```
1219///
1220/// # Service Description
1221///
1222/// Google Cloud HSM Management Service
1223///
1224/// Provides interfaces for managing HSM instances.
1225///
1226/// Implements a REST model with the following objects:
1227///
1228/// * [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]
1229/// * [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
1230///
1231/// [google.cloud.kms.v1.SingleTenantHsmInstance]: crate::model::SingleTenantHsmInstance
1232/// [google.cloud.kms.v1.SingleTenantHsmInstanceProposal]: crate::model::SingleTenantHsmInstanceProposal
1233///
1234/// # Configuration
1235///
1236/// To configure `HsmManagement` use the `with_*` methods in the type returned
1237/// by [builder()][HsmManagement::builder]. The default configuration should
1238/// work for most applications. Common configuration changes include
1239///
1240/// * [with_endpoint()]: by default this client uses the global default endpoint
1241/// (`https://cloudkms.googleapis.com`). Applications using regional
1242/// endpoints or running in restricted networks (e.g. a network configured
1243/// with [Private Google Access with VPC Service Controls]) may want to
1244/// override this default.
1245/// * [with_credentials()]: by default this client uses
1246/// [Application Default Credentials]. Applications using custom
1247/// authentication may need to override this default.
1248///
1249/// [with_endpoint()]: super::builder::hsm_management::ClientBuilder::with_endpoint
1250/// [with_credentials()]: super::builder::hsm_management::ClientBuilder::with_credentials
1251/// [Private Google Access with VPC Service Controls]: https://cloud.google.com/vpc-service-controls/docs/private-connectivity
1252/// [Application Default Credentials]: https://cloud.google.com/docs/authentication#adc
1253///
1254/// # Pooling and Cloning
1255///
1256/// `HsmManagement` holds a connection pool internally, it is advised to
1257/// create one and reuse it. You do not need to wrap `HsmManagement` in
1258/// an [Rc](std::rc::Rc) or [Arc](std::sync::Arc) to reuse it, because it
1259/// already uses an `Arc` internally.
1260#[derive(Clone, Debug)]
1261pub struct HsmManagement {
1262 inner: std::sync::Arc<dyn super::stub::dynamic::HsmManagement>,
1263}
1264
1265impl HsmManagement {
1266 /// Returns a builder for [HsmManagement].
1267 ///
1268 /// ```
1269 /// # async fn sample() -> google_cloud_gax::client_builder::Result<()> {
1270 /// # use google_cloud_kms_v1::client::HsmManagement;
1271 /// let client = HsmManagement::builder().build().await?;
1272 /// # Ok(()) }
1273 /// ```
1274 pub fn builder() -> super::builder::hsm_management::ClientBuilder {
1275 crate::new_client_builder(super::builder::hsm_management::client::Factory)
1276 }
1277
1278 /// Creates a new client from the provided stub.
1279 ///
1280 /// The most common case for calling this function is in tests mocking the
1281 /// client's behavior.
1282 pub fn from_stub<T>(stub: impl Into<std::sync::Arc<T>>) -> Self
1283 where
1284 T: super::stub::HsmManagement + 'static,
1285 {
1286 Self { inner: stub.into() }
1287 }
1288
1289 pub(crate) async fn new(
1290 config: gaxi::options::ClientConfig,
1291 ) -> crate::ClientBuilderResult<Self> {
1292 let inner = Self::build_inner(config).await?;
1293 Ok(Self { inner })
1294 }
1295
1296 async fn build_inner(
1297 conf: gaxi::options::ClientConfig,
1298 ) -> crate::ClientBuilderResult<std::sync::Arc<dyn super::stub::dynamic::HsmManagement>> {
1299 if gaxi::options::tracing_enabled(&conf) {
1300 return Ok(std::sync::Arc::new(Self::build_with_tracing(conf).await?));
1301 }
1302 Ok(std::sync::Arc::new(Self::build_transport(conf).await?))
1303 }
1304
1305 async fn build_transport(
1306 conf: gaxi::options::ClientConfig,
1307 ) -> crate::ClientBuilderResult<impl super::stub::HsmManagement> {
1308 super::transport::HsmManagement::new(conf).await
1309 }
1310
1311 async fn build_with_tracing(
1312 conf: gaxi::options::ClientConfig,
1313 ) -> crate::ClientBuilderResult<impl super::stub::HsmManagement> {
1314 Self::build_transport(conf)
1315 .await
1316 .map(super::tracing::HsmManagement::new)
1317 }
1318
1319 /// Lists
1320 /// [SingleTenantHsmInstances][google.cloud.kms.v1.SingleTenantHsmInstance].
1321 ///
1322 /// [google.cloud.kms.v1.SingleTenantHsmInstance]: crate::model::SingleTenantHsmInstance
1323 ///
1324 /// # Example
1325 /// ```
1326 /// # use google_cloud_kms_v1::client::HsmManagement;
1327 /// use google_cloud_gax::paginator::ItemPaginator as _;
1328 /// use google_cloud_kms_v1::Result;
1329 /// async fn sample(
1330 /// client: &HsmManagement, parent: &str
1331 /// ) -> Result<()> {
1332 /// let mut list = client.list_single_tenant_hsm_instances()
1333 /// .set_parent(parent)
1334 /// .by_item();
1335 /// while let Some(item) = list.next().await.transpose()? {
1336 /// println!("{:?}", item);
1337 /// }
1338 /// Ok(())
1339 /// }
1340 /// ```
1341 pub fn list_single_tenant_hsm_instances(
1342 &self,
1343 ) -> super::builder::hsm_management::ListSingleTenantHsmInstances {
1344 super::builder::hsm_management::ListSingleTenantHsmInstances::new(self.inner.clone())
1345 }
1346
1347 /// Returns metadata for a given
1348 /// [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
1349 ///
1350 /// [google.cloud.kms.v1.SingleTenantHsmInstance]: crate::model::SingleTenantHsmInstance
1351 ///
1352 /// # Example
1353 /// ```
1354 /// # use google_cloud_kms_v1::client::HsmManagement;
1355 /// use google_cloud_kms_v1::Result;
1356 /// async fn sample(
1357 /// client: &HsmManagement, project_id: &str, location_id: &str, single_tenant_hsm_instance_id: &str
1358 /// ) -> Result<()> {
1359 /// let response = client.get_single_tenant_hsm_instance()
1360 /// .set_name(format!("projects/{project_id}/locations/{location_id}/singleTenantHsmInstances/{single_tenant_hsm_instance_id}"))
1361 /// .send().await?;
1362 /// println!("response {:?}", response);
1363 /// Ok(())
1364 /// }
1365 /// ```
1366 pub fn get_single_tenant_hsm_instance(
1367 &self,
1368 ) -> super::builder::hsm_management::GetSingleTenantHsmInstance {
1369 super::builder::hsm_management::GetSingleTenantHsmInstance::new(self.inner.clone())
1370 }
1371
1372 /// Creates a new
1373 /// [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance] in a
1374 /// given Project and Location. User must create a RegisterTwoFactorAuthKeys
1375 /// proposal with this single-tenant HSM instance to finish setup of the
1376 /// instance.
1377 ///
1378 /// [google.cloud.kms.v1.SingleTenantHsmInstance]: crate::model::SingleTenantHsmInstance
1379 ///
1380 /// # Long running operations
1381 ///
1382 /// This method is used to start, and/or poll a [long-running Operation].
1383 /// The [Working with long-running operations] chapter in the [user guide]
1384 /// covers these operations in detail.
1385 ///
1386 /// [long-running operation]: https://google.aip.dev/151
1387 /// [user guide]: https://googleapis.github.io/google-cloud-rust/
1388 /// [working with long-running operations]: https://googleapis.github.io/google-cloud-rust/working_with_long_running_operations.html
1389 ///
1390 /// # Example
1391 /// ```
1392 /// # use google_cloud_kms_v1::client::HsmManagement;
1393 /// use google_cloud_lro::Poller;
1394 /// use google_cloud_kms_v1::model::SingleTenantHsmInstance;
1395 /// use google_cloud_kms_v1::Result;
1396 /// async fn sample(
1397 /// client: &HsmManagement, parent: &str
1398 /// ) -> Result<()> {
1399 /// let response = client.create_single_tenant_hsm_instance()
1400 /// .set_parent(parent)
1401 /// .set_single_tenant_hsm_instance(
1402 /// SingleTenantHsmInstance::new()/* set fields */
1403 /// )
1404 /// .poller().until_done().await?;
1405 /// println!("response {:?}", response);
1406 /// Ok(())
1407 /// }
1408 /// ```
1409 pub fn create_single_tenant_hsm_instance(
1410 &self,
1411 ) -> super::builder::hsm_management::CreateSingleTenantHsmInstance {
1412 super::builder::hsm_management::CreateSingleTenantHsmInstance::new(self.inner.clone())
1413 }
1414
1415 /// Creates a new
1416 /// [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
1417 /// for a given
1418 /// [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance].
1419 ///
1420 /// [google.cloud.kms.v1.SingleTenantHsmInstance]: crate::model::SingleTenantHsmInstance
1421 /// [google.cloud.kms.v1.SingleTenantHsmInstanceProposal]: crate::model::SingleTenantHsmInstanceProposal
1422 ///
1423 /// # Long running operations
1424 ///
1425 /// This method is used to start, and/or poll a [long-running Operation].
1426 /// The [Working with long-running operations] chapter in the [user guide]
1427 /// covers these operations in detail.
1428 ///
1429 /// [long-running operation]: https://google.aip.dev/151
1430 /// [user guide]: https://googleapis.github.io/google-cloud-rust/
1431 /// [working with long-running operations]: https://googleapis.github.io/google-cloud-rust/working_with_long_running_operations.html
1432 ///
1433 /// # Example
1434 /// ```
1435 /// # use google_cloud_kms_v1::client::HsmManagement;
1436 /// use google_cloud_lro::Poller;
1437 /// use google_cloud_kms_v1::model::SingleTenantHsmInstanceProposal;
1438 /// use google_cloud_kms_v1::Result;
1439 /// async fn sample(
1440 /// client: &HsmManagement, project_id: &str, location_id: &str, single_tenant_hsm_instance_id: &str
1441 /// ) -> Result<()> {
1442 /// let response = client.create_single_tenant_hsm_instance_proposal()
1443 /// .set_parent(format!("projects/{project_id}/locations/{location_id}/singleTenantHsmInstances/{single_tenant_hsm_instance_id}"))
1444 /// .set_single_tenant_hsm_instance_proposal(
1445 /// SingleTenantHsmInstanceProposal::new()/* set fields */
1446 /// )
1447 /// .poller().until_done().await?;
1448 /// println!("response {:?}", response);
1449 /// Ok(())
1450 /// }
1451 /// ```
1452 pub fn create_single_tenant_hsm_instance_proposal(
1453 &self,
1454 ) -> super::builder::hsm_management::CreateSingleTenantHsmInstanceProposal {
1455 super::builder::hsm_management::CreateSingleTenantHsmInstanceProposal::new(
1456 self.inner.clone(),
1457 )
1458 }
1459
1460 /// Approves a
1461 /// [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
1462 /// for a given
1463 /// [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]. The
1464 /// proposal must be in the
1465 /// [PENDING][google.cloud.kms.v1.SingleTenantHsmInstanceProposal.State.PENDING]
1466 /// state.
1467 ///
1468 /// [google.cloud.kms.v1.SingleTenantHsmInstance]: crate::model::SingleTenantHsmInstance
1469 /// [google.cloud.kms.v1.SingleTenantHsmInstanceProposal]: crate::model::SingleTenantHsmInstanceProposal
1470 /// [google.cloud.kms.v1.SingleTenantHsmInstanceProposal.State.PENDING]: crate::model::single_tenant_hsm_instance_proposal::State::Pending
1471 ///
1472 /// # Example
1473 /// ```
1474 /// # use google_cloud_kms_v1::client::HsmManagement;
1475 /// use google_cloud_kms_v1::Result;
1476 /// async fn sample(
1477 /// client: &HsmManagement
1478 /// ) -> Result<()> {
1479 /// let response = client.approve_single_tenant_hsm_instance_proposal()
1480 /// /* set fields */
1481 /// .send().await?;
1482 /// println!("response {:?}", response);
1483 /// Ok(())
1484 /// }
1485 /// ```
1486 pub fn approve_single_tenant_hsm_instance_proposal(
1487 &self,
1488 ) -> super::builder::hsm_management::ApproveSingleTenantHsmInstanceProposal {
1489 super::builder::hsm_management::ApproveSingleTenantHsmInstanceProposal::new(
1490 self.inner.clone(),
1491 )
1492 }
1493
1494 /// Executes a
1495 /// [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal]
1496 /// for a given
1497 /// [SingleTenantHsmInstance][google.cloud.kms.v1.SingleTenantHsmInstance]. The
1498 /// proposal must be in the
1499 /// [APPROVED][google.cloud.kms.v1.SingleTenantHsmInstanceProposal.State.APPROVED]
1500 /// state.
1501 ///
1502 /// [google.cloud.kms.v1.SingleTenantHsmInstance]: crate::model::SingleTenantHsmInstance
1503 /// [google.cloud.kms.v1.SingleTenantHsmInstanceProposal]: crate::model::SingleTenantHsmInstanceProposal
1504 /// [google.cloud.kms.v1.SingleTenantHsmInstanceProposal.State.APPROVED]: crate::model::single_tenant_hsm_instance_proposal::State::Approved
1505 ///
1506 /// # Long running operations
1507 ///
1508 /// This method is used to start, and/or poll a [long-running Operation].
1509 /// The [Working with long-running operations] chapter in the [user guide]
1510 /// covers these operations in detail.
1511 ///
1512 /// [long-running operation]: https://google.aip.dev/151
1513 /// [user guide]: https://googleapis.github.io/google-cloud-rust/
1514 /// [working with long-running operations]: https://googleapis.github.io/google-cloud-rust/working_with_long_running_operations.html
1515 ///
1516 /// # Example
1517 /// ```
1518 /// # use google_cloud_kms_v1::client::HsmManagement;
1519 /// use google_cloud_lro::Poller;
1520 /// use google_cloud_kms_v1::Result;
1521 /// async fn sample(
1522 /// client: &HsmManagement
1523 /// ) -> Result<()> {
1524 /// let response = client.execute_single_tenant_hsm_instance_proposal()
1525 /// /* set fields */
1526 /// .poller().until_done().await?;
1527 /// println!("response {:?}", response);
1528 /// Ok(())
1529 /// }
1530 /// ```
1531 pub fn execute_single_tenant_hsm_instance_proposal(
1532 &self,
1533 ) -> super::builder::hsm_management::ExecuteSingleTenantHsmInstanceProposal {
1534 super::builder::hsm_management::ExecuteSingleTenantHsmInstanceProposal::new(
1535 self.inner.clone(),
1536 )
1537 }
1538
1539 /// Returns metadata for a given
1540 /// [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal].
1541 ///
1542 /// [google.cloud.kms.v1.SingleTenantHsmInstanceProposal]: crate::model::SingleTenantHsmInstanceProposal
1543 ///
1544 /// # Example
1545 /// ```
1546 /// # use google_cloud_kms_v1::client::HsmManagement;
1547 /// use google_cloud_kms_v1::Result;
1548 /// async fn sample(
1549 /// client: &HsmManagement, project_id: &str, location_id: &str, single_tenant_hsm_instance_id: &str, proposal_id: &str
1550 /// ) -> Result<()> {
1551 /// let response = client.get_single_tenant_hsm_instance_proposal()
1552 /// .set_name(format!("projects/{project_id}/locations/{location_id}/singleTenantHsmInstances/{single_tenant_hsm_instance_id}/proposals/{proposal_id}"))
1553 /// .send().await?;
1554 /// println!("response {:?}", response);
1555 /// Ok(())
1556 /// }
1557 /// ```
1558 pub fn get_single_tenant_hsm_instance_proposal(
1559 &self,
1560 ) -> super::builder::hsm_management::GetSingleTenantHsmInstanceProposal {
1561 super::builder::hsm_management::GetSingleTenantHsmInstanceProposal::new(self.inner.clone())
1562 }
1563
1564 /// Lists
1565 /// [SingleTenantHsmInstanceProposals][google.cloud.kms.v1.SingleTenantHsmInstanceProposal].
1566 ///
1567 /// [google.cloud.kms.v1.SingleTenantHsmInstanceProposal]: crate::model::SingleTenantHsmInstanceProposal
1568 ///
1569 /// # Example
1570 /// ```
1571 /// # use google_cloud_kms_v1::client::HsmManagement;
1572 /// use google_cloud_gax::paginator::ItemPaginator as _;
1573 /// use google_cloud_kms_v1::Result;
1574 /// async fn sample(
1575 /// client: &HsmManagement, project_id: &str, location_id: &str, single_tenant_hsm_instance_id: &str
1576 /// ) -> Result<()> {
1577 /// let mut list = client.list_single_tenant_hsm_instance_proposals()
1578 /// .set_parent(format!("projects/{project_id}/locations/{location_id}/singleTenantHsmInstances/{single_tenant_hsm_instance_id}"))
1579 /// .by_item();
1580 /// while let Some(item) = list.next().await.transpose()? {
1581 /// println!("{:?}", item);
1582 /// }
1583 /// Ok(())
1584 /// }
1585 /// ```
1586 pub fn list_single_tenant_hsm_instance_proposals(
1587 &self,
1588 ) -> super::builder::hsm_management::ListSingleTenantHsmInstanceProposals {
1589 super::builder::hsm_management::ListSingleTenantHsmInstanceProposals::new(
1590 self.inner.clone(),
1591 )
1592 }
1593
1594 /// Deletes a
1595 /// [SingleTenantHsmInstanceProposal][google.cloud.kms.v1.SingleTenantHsmInstanceProposal].
1596 ///
1597 /// [google.cloud.kms.v1.SingleTenantHsmInstanceProposal]: crate::model::SingleTenantHsmInstanceProposal
1598 ///
1599 /// # Example
1600 /// ```
1601 /// # use google_cloud_kms_v1::client::HsmManagement;
1602 /// use google_cloud_kms_v1::Result;
1603 /// async fn sample(
1604 /// client: &HsmManagement, project_id: &str, location_id: &str, single_tenant_hsm_instance_id: &str, proposal_id: &str
1605 /// ) -> Result<()> {
1606 /// client.delete_single_tenant_hsm_instance_proposal()
1607 /// .set_name(format!("projects/{project_id}/locations/{location_id}/singleTenantHsmInstances/{single_tenant_hsm_instance_id}/proposals/{proposal_id}"))
1608 /// .send().await?;
1609 /// Ok(())
1610 /// }
1611 /// ```
1612 pub fn delete_single_tenant_hsm_instance_proposal(
1613 &self,
1614 ) -> super::builder::hsm_management::DeleteSingleTenantHsmInstanceProposal {
1615 super::builder::hsm_management::DeleteSingleTenantHsmInstanceProposal::new(
1616 self.inner.clone(),
1617 )
1618 }
1619
1620 /// Lists information about the supported locations for this service.
1621 ///
1622 /// This method lists locations based on the resource scope provided in
1623 /// the [ListLocationsRequest.name][google.cloud.location.ListLocationsRequest.name] field: *
1624 /// **Global locations**: If `name` is empty, the method lists the
1625 /// public locations available to all projects. * **Project-specific
1626 /// locations**: If `name` follows the format
1627 /// `projects/{project}`, the method lists locations visible to that
1628 /// specific project. This includes public, private, or other
1629 /// project-specific locations enabled for the project.
1630 ///
1631 /// For gRPC and client library implementations, the resource name is
1632 /// passed as the `name` field. For direct service calls, the resource
1633 /// name is
1634 /// incorporated into the request path based on the specific service
1635 /// implementation and version.
1636 ///
1637 /// [google.cloud.location.ListLocationsRequest.name]: google_cloud_location::model::ListLocationsRequest::name
1638 ///
1639 /// # Example
1640 /// ```
1641 /// # use google_cloud_kms_v1::client::HsmManagement;
1642 /// use google_cloud_gax::paginator::ItemPaginator as _;
1643 /// use google_cloud_kms_v1::Result;
1644 /// async fn sample(
1645 /// client: &HsmManagement
1646 /// ) -> Result<()> {
1647 /// let mut list = client.list_locations()
1648 /// /* set fields */
1649 /// .by_item();
1650 /// while let Some(item) = list.next().await.transpose()? {
1651 /// println!("{:?}", item);
1652 /// }
1653 /// Ok(())
1654 /// }
1655 /// ```
1656 pub fn list_locations(&self) -> super::builder::hsm_management::ListLocations {
1657 super::builder::hsm_management::ListLocations::new(self.inner.clone())
1658 }
1659
1660 /// Gets information about a location.
1661 ///
1662 /// # Example
1663 /// ```
1664 /// # use google_cloud_kms_v1::client::HsmManagement;
1665 /// use google_cloud_kms_v1::Result;
1666 /// async fn sample(
1667 /// client: &HsmManagement
1668 /// ) -> Result<()> {
1669 /// let response = client.get_location()
1670 /// /* set fields */
1671 /// .send().await?;
1672 /// println!("response {:?}", response);
1673 /// Ok(())
1674 /// }
1675 /// ```
1676 pub fn get_location(&self) -> super::builder::hsm_management::GetLocation {
1677 super::builder::hsm_management::GetLocation::new(self.inner.clone())
1678 }
1679
1680 /// Sets the access control policy on the specified resource. Replaces
1681 /// any existing policy.
1682 ///
1683 /// Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`
1684 /// errors.
1685 ///
1686 /// # Example
1687 /// ```
1688 /// # use google_cloud_kms_v1::client::HsmManagement;
1689 /// use google_cloud_kms_v1::Result;
1690 /// async fn sample(
1691 /// client: &HsmManagement
1692 /// ) -> Result<()> {
1693 /// let response = client.set_iam_policy()
1694 /// /* set fields */
1695 /// .send().await?;
1696 /// println!("response {:?}", response);
1697 /// Ok(())
1698 /// }
1699 /// ```
1700 pub fn set_iam_policy(&self) -> super::builder::hsm_management::SetIamPolicy {
1701 super::builder::hsm_management::SetIamPolicy::new(self.inner.clone())
1702 }
1703
1704 /// Gets the access control policy for a resource. Returns an empty policy
1705 /// if the resource exists and does not have a policy set.
1706 ///
1707 /// # Example
1708 /// ```
1709 /// # use google_cloud_kms_v1::client::HsmManagement;
1710 /// use google_cloud_kms_v1::Result;
1711 /// async fn sample(
1712 /// client: &HsmManagement
1713 /// ) -> Result<()> {
1714 /// let response = client.get_iam_policy()
1715 /// /* set fields */
1716 /// .send().await?;
1717 /// println!("response {:?}", response);
1718 /// Ok(())
1719 /// }
1720 /// ```
1721 pub fn get_iam_policy(&self) -> super::builder::hsm_management::GetIamPolicy {
1722 super::builder::hsm_management::GetIamPolicy::new(self.inner.clone())
1723 }
1724
1725 /// Returns permissions that a caller has on the specified resource. If the
1726 /// resource does not exist, this will return an empty set of
1727 /// permissions, not a `NOT_FOUND` error.
1728 ///
1729 /// Note: This operation is designed to be used for building
1730 /// permission-aware UIs and command-line tools, not for authorization
1731 /// checking. This operation may "fail open" without warning.
1732 ///
1733 /// # Example
1734 /// ```
1735 /// # use google_cloud_kms_v1::client::HsmManagement;
1736 /// use google_cloud_kms_v1::Result;
1737 /// async fn sample(
1738 /// client: &HsmManagement
1739 /// ) -> Result<()> {
1740 /// let response = client.test_iam_permissions()
1741 /// /* set fields */
1742 /// .send().await?;
1743 /// println!("response {:?}", response);
1744 /// Ok(())
1745 /// }
1746 /// ```
1747 pub fn test_iam_permissions(&self) -> super::builder::hsm_management::TestIamPermissions {
1748 super::builder::hsm_management::TestIamPermissions::new(self.inner.clone())
1749 }
1750
1751 /// Provides the [Operations][google.longrunning.Operations] service functionality in this service.
1752 ///
1753 /// [google.longrunning.Operations]: google-cloud-longrunning::client::Operations
1754 ///
1755 /// # Example
1756 /// ```
1757 /// # use google_cloud_kms_v1::client::HsmManagement;
1758 /// use google_cloud_kms_v1::Result;
1759 /// async fn sample(
1760 /// client: &HsmManagement
1761 /// ) -> Result<()> {
1762 /// let response = client.get_operation()
1763 /// /* set fields */
1764 /// .send().await?;
1765 /// println!("response {:?}", response);
1766 /// Ok(())
1767 /// }
1768 /// ```
1769 pub fn get_operation(&self) -> super::builder::hsm_management::GetOperation {
1770 super::builder::hsm_management::GetOperation::new(self.inner.clone())
1771 }
1772}
1773
1774/// Implements a client for the Cloud Key Management Service (KMS) API.
1775///
1776/// # Example
1777/// ```
1778/// # use google_cloud_kms_v1::client::KeyManagementService;
1779/// use google_cloud_gax::paginator::ItemPaginator as _;
1780/// async fn sample(
1781/// parent: &str,
1782/// ) -> anyhow::Result<()> {
1783/// let client = KeyManagementService::builder().build().await?;
1784/// let mut list = client.list_key_rings()
1785/// .set_parent(parent)
1786/// .by_item();
1787/// while let Some(item) = list.next().await.transpose()? {
1788/// println!("{:?}", item);
1789/// }
1790/// Ok(())
1791/// }
1792/// ```
1793///
1794/// # Service Description
1795///
1796/// Google Cloud Key Management Service
1797///
1798/// Manages cryptographic keys and operations using those keys. Implements a REST
1799/// model with the following objects:
1800///
1801/// * [KeyRing][google.cloud.kms.v1.KeyRing]
1802/// * [CryptoKey][google.cloud.kms.v1.CryptoKey]
1803/// * [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]
1804/// * [ImportJob][google.cloud.kms.v1.ImportJob]
1805///
1806/// If you are using manual gRPC libraries, see
1807/// [Using gRPC with Cloud KMS](https://cloud.google.com/kms/docs/grpc).
1808///
1809/// [google.cloud.kms.v1.CryptoKey]: crate::model::CryptoKey
1810/// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
1811/// [google.cloud.kms.v1.ImportJob]: crate::model::ImportJob
1812/// [google.cloud.kms.v1.KeyRing]: crate::model::KeyRing
1813///
1814/// # Configuration
1815///
1816/// To configure `KeyManagementService` use the `with_*` methods in the type returned
1817/// by [builder()][KeyManagementService::builder]. The default configuration should
1818/// work for most applications. Common configuration changes include
1819///
1820/// * [with_endpoint()]: by default this client uses the global default endpoint
1821/// (`https://cloudkms.googleapis.com`). Applications using regional
1822/// endpoints or running in restricted networks (e.g. a network configured
1823/// with [Private Google Access with VPC Service Controls]) may want to
1824/// override this default.
1825/// * [with_credentials()]: by default this client uses
1826/// [Application Default Credentials]. Applications using custom
1827/// authentication may need to override this default.
1828///
1829/// [with_endpoint()]: super::builder::key_management_service::ClientBuilder::with_endpoint
1830/// [with_credentials()]: super::builder::key_management_service::ClientBuilder::with_credentials
1831/// [Private Google Access with VPC Service Controls]: https://cloud.google.com/vpc-service-controls/docs/private-connectivity
1832/// [Application Default Credentials]: https://cloud.google.com/docs/authentication#adc
1833///
1834/// # Pooling and Cloning
1835///
1836/// `KeyManagementService` holds a connection pool internally, it is advised to
1837/// create one and reuse it. You do not need to wrap `KeyManagementService` in
1838/// an [Rc](std::rc::Rc) or [Arc](std::sync::Arc) to reuse it, because it
1839/// already uses an `Arc` internally.
1840#[derive(Clone, Debug)]
1841pub struct KeyManagementService {
1842 inner: std::sync::Arc<dyn super::stub::dynamic::KeyManagementService>,
1843}
1844
1845impl KeyManagementService {
1846 /// Returns a builder for [KeyManagementService].
1847 ///
1848 /// ```
1849 /// # async fn sample() -> google_cloud_gax::client_builder::Result<()> {
1850 /// # use google_cloud_kms_v1::client::KeyManagementService;
1851 /// let client = KeyManagementService::builder().build().await?;
1852 /// # Ok(()) }
1853 /// ```
1854 pub fn builder() -> super::builder::key_management_service::ClientBuilder {
1855 crate::new_client_builder(super::builder::key_management_service::client::Factory)
1856 }
1857
1858 /// Creates a new client from the provided stub.
1859 ///
1860 /// The most common case for calling this function is in tests mocking the
1861 /// client's behavior.
1862 pub fn from_stub<T>(stub: impl Into<std::sync::Arc<T>>) -> Self
1863 where
1864 T: super::stub::KeyManagementService + 'static,
1865 {
1866 Self { inner: stub.into() }
1867 }
1868
1869 pub(crate) async fn new(
1870 config: gaxi::options::ClientConfig,
1871 ) -> crate::ClientBuilderResult<Self> {
1872 let inner = Self::build_inner(config).await?;
1873 Ok(Self { inner })
1874 }
1875
1876 async fn build_inner(
1877 conf: gaxi::options::ClientConfig,
1878 ) -> crate::ClientBuilderResult<std::sync::Arc<dyn super::stub::dynamic::KeyManagementService>>
1879 {
1880 if gaxi::options::tracing_enabled(&conf) {
1881 return Ok(std::sync::Arc::new(Self::build_with_tracing(conf).await?));
1882 }
1883 Ok(std::sync::Arc::new(Self::build_transport(conf).await?))
1884 }
1885
1886 async fn build_transport(
1887 conf: gaxi::options::ClientConfig,
1888 ) -> crate::ClientBuilderResult<impl super::stub::KeyManagementService> {
1889 super::transport::KeyManagementService::new(conf).await
1890 }
1891
1892 async fn build_with_tracing(
1893 conf: gaxi::options::ClientConfig,
1894 ) -> crate::ClientBuilderResult<impl super::stub::KeyManagementService> {
1895 Self::build_transport(conf)
1896 .await
1897 .map(super::tracing::KeyManagementService::new)
1898 }
1899
1900 /// Lists [KeyRings][google.cloud.kms.v1.KeyRing].
1901 ///
1902 /// [google.cloud.kms.v1.KeyRing]: crate::model::KeyRing
1903 ///
1904 /// # Example
1905 /// ```
1906 /// # use google_cloud_kms_v1::client::KeyManagementService;
1907 /// use google_cloud_gax::paginator::ItemPaginator as _;
1908 /// use google_cloud_kms_v1::Result;
1909 /// async fn sample(
1910 /// client: &KeyManagementService, parent: &str
1911 /// ) -> Result<()> {
1912 /// let mut list = client.list_key_rings()
1913 /// .set_parent(parent)
1914 /// .by_item();
1915 /// while let Some(item) = list.next().await.transpose()? {
1916 /// println!("{:?}", item);
1917 /// }
1918 /// Ok(())
1919 /// }
1920 /// ```
1921 pub fn list_key_rings(&self) -> super::builder::key_management_service::ListKeyRings {
1922 super::builder::key_management_service::ListKeyRings::new(self.inner.clone())
1923 }
1924
1925 /// Lists [CryptoKeys][google.cloud.kms.v1.CryptoKey].
1926 ///
1927 /// [google.cloud.kms.v1.CryptoKey]: crate::model::CryptoKey
1928 ///
1929 /// # Example
1930 /// ```
1931 /// # use google_cloud_kms_v1::client::KeyManagementService;
1932 /// use google_cloud_gax::paginator::ItemPaginator as _;
1933 /// use google_cloud_kms_v1::Result;
1934 /// async fn sample(
1935 /// client: &KeyManagementService, project_id: &str, location_id: &str, key_ring_id: &str
1936 /// ) -> Result<()> {
1937 /// let mut list = client.list_crypto_keys()
1938 /// .set_parent(format!("projects/{project_id}/locations/{location_id}/keyRings/{key_ring_id}"))
1939 /// .by_item();
1940 /// while let Some(item) = list.next().await.transpose()? {
1941 /// println!("{:?}", item);
1942 /// }
1943 /// Ok(())
1944 /// }
1945 /// ```
1946 pub fn list_crypto_keys(&self) -> super::builder::key_management_service::ListCryptoKeys {
1947 super::builder::key_management_service::ListCryptoKeys::new(self.inner.clone())
1948 }
1949
1950 /// Lists [CryptoKeyVersions][google.cloud.kms.v1.CryptoKeyVersion].
1951 ///
1952 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
1953 ///
1954 /// # Example
1955 /// ```
1956 /// # use google_cloud_kms_v1::client::KeyManagementService;
1957 /// use google_cloud_gax::paginator::ItemPaginator as _;
1958 /// use google_cloud_kms_v1::Result;
1959 /// async fn sample(
1960 /// client: &KeyManagementService, project_id: &str, location_id: &str, key_ring_id: &str, crypto_key_id: &str
1961 /// ) -> Result<()> {
1962 /// let mut list = client.list_crypto_key_versions()
1963 /// .set_parent(format!("projects/{project_id}/locations/{location_id}/keyRings/{key_ring_id}/cryptoKeys/{crypto_key_id}"))
1964 /// .by_item();
1965 /// while let Some(item) = list.next().await.transpose()? {
1966 /// println!("{:?}", item);
1967 /// }
1968 /// Ok(())
1969 /// }
1970 /// ```
1971 pub fn list_crypto_key_versions(
1972 &self,
1973 ) -> super::builder::key_management_service::ListCryptoKeyVersions {
1974 super::builder::key_management_service::ListCryptoKeyVersions::new(self.inner.clone())
1975 }
1976
1977 /// Lists [ImportJobs][google.cloud.kms.v1.ImportJob].
1978 ///
1979 /// [google.cloud.kms.v1.ImportJob]: crate::model::ImportJob
1980 ///
1981 /// # Example
1982 /// ```
1983 /// # use google_cloud_kms_v1::client::KeyManagementService;
1984 /// use google_cloud_gax::paginator::ItemPaginator as _;
1985 /// use google_cloud_kms_v1::Result;
1986 /// async fn sample(
1987 /// client: &KeyManagementService, project_id: &str, location_id: &str, key_ring_id: &str
1988 /// ) -> Result<()> {
1989 /// let mut list = client.list_import_jobs()
1990 /// .set_parent(format!("projects/{project_id}/locations/{location_id}/keyRings/{key_ring_id}"))
1991 /// .by_item();
1992 /// while let Some(item) = list.next().await.transpose()? {
1993 /// println!("{:?}", item);
1994 /// }
1995 /// Ok(())
1996 /// }
1997 /// ```
1998 pub fn list_import_jobs(&self) -> super::builder::key_management_service::ListImportJobs {
1999 super::builder::key_management_service::ListImportJobs::new(self.inner.clone())
2000 }
2001
2002 /// Lists the [RetiredResources][google.cloud.kms.v1.RetiredResource] which are
2003 /// the records of deleted [CryptoKeys][google.cloud.kms.v1.CryptoKey].
2004 /// RetiredResources prevent the reuse of these resource names after deletion.
2005 ///
2006 /// [google.cloud.kms.v1.CryptoKey]: crate::model::CryptoKey
2007 /// [google.cloud.kms.v1.RetiredResource]: crate::model::RetiredResource
2008 ///
2009 /// # Example
2010 /// ```
2011 /// # use google_cloud_kms_v1::client::KeyManagementService;
2012 /// use google_cloud_gax::paginator::ItemPaginator as _;
2013 /// use google_cloud_kms_v1::Result;
2014 /// async fn sample(
2015 /// client: &KeyManagementService, project_id: &str, location_id: &str
2016 /// ) -> Result<()> {
2017 /// let mut list = client.list_retired_resources()
2018 /// .set_parent(format!("projects/{project_id}/locations/{location_id}"))
2019 /// .by_item();
2020 /// while let Some(item) = list.next().await.transpose()? {
2021 /// println!("{:?}", item);
2022 /// }
2023 /// Ok(())
2024 /// }
2025 /// ```
2026 pub fn list_retired_resources(
2027 &self,
2028 ) -> super::builder::key_management_service::ListRetiredResources {
2029 super::builder::key_management_service::ListRetiredResources::new(self.inner.clone())
2030 }
2031
2032 /// Returns metadata for a given [KeyRing][google.cloud.kms.v1.KeyRing].
2033 ///
2034 /// [google.cloud.kms.v1.KeyRing]: crate::model::KeyRing
2035 ///
2036 /// # Example
2037 /// ```
2038 /// # use google_cloud_kms_v1::client::KeyManagementService;
2039 /// use google_cloud_kms_v1::Result;
2040 /// async fn sample(
2041 /// client: &KeyManagementService, project_id: &str, location_id: &str, key_ring_id: &str
2042 /// ) -> Result<()> {
2043 /// let response = client.get_key_ring()
2044 /// .set_name(format!("projects/{project_id}/locations/{location_id}/keyRings/{key_ring_id}"))
2045 /// .send().await?;
2046 /// println!("response {:?}", response);
2047 /// Ok(())
2048 /// }
2049 /// ```
2050 pub fn get_key_ring(&self) -> super::builder::key_management_service::GetKeyRing {
2051 super::builder::key_management_service::GetKeyRing::new(self.inner.clone())
2052 }
2053
2054 /// Returns metadata for a given [CryptoKey][google.cloud.kms.v1.CryptoKey], as
2055 /// well as its [primary][google.cloud.kms.v1.CryptoKey.primary]
2056 /// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion].
2057 ///
2058 /// [google.cloud.kms.v1.CryptoKey]: crate::model::CryptoKey
2059 /// [google.cloud.kms.v1.CryptoKey.primary]: crate::model::CryptoKey::primary
2060 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2061 ///
2062 /// # Example
2063 /// ```
2064 /// # use google_cloud_kms_v1::client::KeyManagementService;
2065 /// use google_cloud_kms_v1::Result;
2066 /// async fn sample(
2067 /// client: &KeyManagementService, project_id: &str, location_id: &str, key_ring_id: &str, crypto_key_id: &str
2068 /// ) -> Result<()> {
2069 /// let response = client.get_crypto_key()
2070 /// .set_name(format!("projects/{project_id}/locations/{location_id}/keyRings/{key_ring_id}/cryptoKeys/{crypto_key_id}"))
2071 /// .send().await?;
2072 /// println!("response {:?}", response);
2073 /// Ok(())
2074 /// }
2075 /// ```
2076 pub fn get_crypto_key(&self) -> super::builder::key_management_service::GetCryptoKey {
2077 super::builder::key_management_service::GetCryptoKey::new(self.inner.clone())
2078 }
2079
2080 /// Returns metadata for a given
2081 /// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion].
2082 ///
2083 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2084 ///
2085 /// # Example
2086 /// ```
2087 /// # use google_cloud_kms_v1::client::KeyManagementService;
2088 /// use google_cloud_kms_v1::Result;
2089 /// async fn sample(
2090 /// client: &KeyManagementService, project_id: &str, location_id: &str, key_ring_id: &str, crypto_key_id: &str, crypto_key_version_id: &str
2091 /// ) -> Result<()> {
2092 /// let response = client.get_crypto_key_version()
2093 /// .set_name(format!("projects/{project_id}/locations/{location_id}/keyRings/{key_ring_id}/cryptoKeys/{crypto_key_id}/cryptoKeyVersions/{crypto_key_version_id}"))
2094 /// .send().await?;
2095 /// println!("response {:?}", response);
2096 /// Ok(())
2097 /// }
2098 /// ```
2099 pub fn get_crypto_key_version(
2100 &self,
2101 ) -> super::builder::key_management_service::GetCryptoKeyVersion {
2102 super::builder::key_management_service::GetCryptoKeyVersion::new(self.inner.clone())
2103 }
2104
2105 /// Returns the public key for the given
2106 /// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]. The
2107 /// [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose] must be
2108 /// [ASYMMETRIC_SIGN][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ASYMMETRIC_SIGN]
2109 /// or
2110 /// [ASYMMETRIC_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ASYMMETRIC_DECRYPT].
2111 ///
2112 /// [google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ASYMMETRIC_DECRYPT]: crate::model::crypto_key::CryptoKeyPurpose::AsymmetricDecrypt
2113 /// [google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ASYMMETRIC_SIGN]: crate::model::crypto_key::CryptoKeyPurpose::AsymmetricSign
2114 /// [google.cloud.kms.v1.CryptoKey.purpose]: crate::model::CryptoKey::purpose
2115 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2116 ///
2117 /// # Example
2118 /// ```
2119 /// # use google_cloud_kms_v1::client::KeyManagementService;
2120 /// use google_cloud_kms_v1::Result;
2121 /// async fn sample(
2122 /// client: &KeyManagementService
2123 /// ) -> Result<()> {
2124 /// let response = client.get_public_key()
2125 /// /* set fields */
2126 /// .send().await?;
2127 /// println!("response {:?}", response);
2128 /// Ok(())
2129 /// }
2130 /// ```
2131 pub fn get_public_key(&self) -> super::builder::key_management_service::GetPublicKey {
2132 super::builder::key_management_service::GetPublicKey::new(self.inner.clone())
2133 }
2134
2135 /// Returns metadata for a given [ImportJob][google.cloud.kms.v1.ImportJob].
2136 ///
2137 /// [google.cloud.kms.v1.ImportJob]: crate::model::ImportJob
2138 ///
2139 /// # Example
2140 /// ```
2141 /// # use google_cloud_kms_v1::client::KeyManagementService;
2142 /// use google_cloud_kms_v1::Result;
2143 /// async fn sample(
2144 /// client: &KeyManagementService, project_id: &str, location_id: &str, key_ring_id: &str, import_job_id: &str
2145 /// ) -> Result<()> {
2146 /// let response = client.get_import_job()
2147 /// .set_name(format!("projects/{project_id}/locations/{location_id}/keyRings/{key_ring_id}/importJobs/{import_job_id}"))
2148 /// .send().await?;
2149 /// println!("response {:?}", response);
2150 /// Ok(())
2151 /// }
2152 /// ```
2153 pub fn get_import_job(&self) -> super::builder::key_management_service::GetImportJob {
2154 super::builder::key_management_service::GetImportJob::new(self.inner.clone())
2155 }
2156
2157 /// Retrieves a specific [RetiredResource][google.cloud.kms.v1.RetiredResource]
2158 /// resource, which represents the record of a deleted
2159 /// [CryptoKey][google.cloud.kms.v1.CryptoKey].
2160 ///
2161 /// [google.cloud.kms.v1.CryptoKey]: crate::model::CryptoKey
2162 /// [google.cloud.kms.v1.RetiredResource]: crate::model::RetiredResource
2163 ///
2164 /// # Example
2165 /// ```
2166 /// # use google_cloud_kms_v1::client::KeyManagementService;
2167 /// use google_cloud_kms_v1::Result;
2168 /// async fn sample(
2169 /// client: &KeyManagementService, project_id: &str, location_id: &str, retired_resource_id: &str
2170 /// ) -> Result<()> {
2171 /// let response = client.get_retired_resource()
2172 /// .set_name(format!("projects/{project_id}/locations/{location_id}/retiredResources/{retired_resource_id}"))
2173 /// .send().await?;
2174 /// println!("response {:?}", response);
2175 /// Ok(())
2176 /// }
2177 /// ```
2178 pub fn get_retired_resource(
2179 &self,
2180 ) -> super::builder::key_management_service::GetRetiredResource {
2181 super::builder::key_management_service::GetRetiredResource::new(self.inner.clone())
2182 }
2183
2184 /// Create a new [KeyRing][google.cloud.kms.v1.KeyRing] in a given Project and
2185 /// Location.
2186 ///
2187 /// [google.cloud.kms.v1.KeyRing]: crate::model::KeyRing
2188 ///
2189 /// # Example
2190 /// ```
2191 /// # use google_cloud_kms_v1::client::KeyManagementService;
2192 /// use google_cloud_kms_v1::model::KeyRing;
2193 /// use google_cloud_kms_v1::Result;
2194 /// async fn sample(
2195 /// client: &KeyManagementService, parent: &str
2196 /// ) -> Result<()> {
2197 /// let response = client.create_key_ring()
2198 /// .set_parent(parent)
2199 /// .set_key_ring(
2200 /// KeyRing::new()/* set fields */
2201 /// )
2202 /// .send().await?;
2203 /// println!("response {:?}", response);
2204 /// Ok(())
2205 /// }
2206 /// ```
2207 pub fn create_key_ring(&self) -> super::builder::key_management_service::CreateKeyRing {
2208 super::builder::key_management_service::CreateKeyRing::new(self.inner.clone())
2209 }
2210
2211 /// Create a new [CryptoKey][google.cloud.kms.v1.CryptoKey] within a
2212 /// [KeyRing][google.cloud.kms.v1.KeyRing].
2213 ///
2214 /// [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose] and
2215 /// [CryptoKey.version_template.algorithm][google.cloud.kms.v1.CryptoKeyVersionTemplate.algorithm]
2216 /// are required.
2217 ///
2218 /// [google.cloud.kms.v1.CryptoKey]: crate::model::CryptoKey
2219 /// [google.cloud.kms.v1.CryptoKey.purpose]: crate::model::CryptoKey::purpose
2220 /// [google.cloud.kms.v1.CryptoKeyVersionTemplate.algorithm]: crate::model::CryptoKeyVersionTemplate::algorithm
2221 /// [google.cloud.kms.v1.KeyRing]: crate::model::KeyRing
2222 ///
2223 /// # Example
2224 /// ```
2225 /// # use google_cloud_kms_v1::client::KeyManagementService;
2226 /// use google_cloud_kms_v1::model::CryptoKey;
2227 /// use google_cloud_kms_v1::Result;
2228 /// async fn sample(
2229 /// client: &KeyManagementService, project_id: &str, location_id: &str, key_ring_id: &str
2230 /// ) -> Result<()> {
2231 /// let response = client.create_crypto_key()
2232 /// .set_parent(format!("projects/{project_id}/locations/{location_id}/keyRings/{key_ring_id}"))
2233 /// .set_crypto_key(
2234 /// CryptoKey::new()/* set fields */
2235 /// )
2236 /// .send().await?;
2237 /// println!("response {:?}", response);
2238 /// Ok(())
2239 /// }
2240 /// ```
2241 pub fn create_crypto_key(&self) -> super::builder::key_management_service::CreateCryptoKey {
2242 super::builder::key_management_service::CreateCryptoKey::new(self.inner.clone())
2243 }
2244
2245 /// Create a new [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] in a
2246 /// [CryptoKey][google.cloud.kms.v1.CryptoKey].
2247 ///
2248 /// The server will assign the next sequential id. If unset,
2249 /// [state][google.cloud.kms.v1.CryptoKeyVersion.state] will be set to
2250 /// [ENABLED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.ENABLED].
2251 ///
2252 /// [google.cloud.kms.v1.CryptoKey]: crate::model::CryptoKey
2253 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2254 /// [google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.ENABLED]: crate::model::crypto_key_version::CryptoKeyVersionState::Enabled
2255 /// [google.cloud.kms.v1.CryptoKeyVersion.state]: crate::model::CryptoKeyVersion::state
2256 ///
2257 /// # Example
2258 /// ```
2259 /// # use google_cloud_kms_v1::client::KeyManagementService;
2260 /// use google_cloud_kms_v1::model::CryptoKeyVersion;
2261 /// use google_cloud_kms_v1::Result;
2262 /// async fn sample(
2263 /// client: &KeyManagementService, project_id: &str, location_id: &str, key_ring_id: &str, crypto_key_id: &str
2264 /// ) -> Result<()> {
2265 /// let response = client.create_crypto_key_version()
2266 /// .set_parent(format!("projects/{project_id}/locations/{location_id}/keyRings/{key_ring_id}/cryptoKeys/{crypto_key_id}"))
2267 /// .set_crypto_key_version(
2268 /// CryptoKeyVersion::new()/* set fields */
2269 /// )
2270 /// .send().await?;
2271 /// println!("response {:?}", response);
2272 /// Ok(())
2273 /// }
2274 /// ```
2275 pub fn create_crypto_key_version(
2276 &self,
2277 ) -> super::builder::key_management_service::CreateCryptoKeyVersion {
2278 super::builder::key_management_service::CreateCryptoKeyVersion::new(self.inner.clone())
2279 }
2280
2281 /// Permanently deletes the given [CryptoKey][google.cloud.kms.v1.CryptoKey].
2282 /// All child [CryptoKeyVersions][google.cloud.kms.v1.CryptoKeyVersion] must
2283 /// have been previously deleted using
2284 /// [KeyManagementService.DeleteCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.DeleteCryptoKeyVersion].
2285 /// The specified crypto key will be immediately and permanently deleted upon
2286 /// calling this method. This action cannot be undone.
2287 ///
2288 /// [google.cloud.kms.v1.CryptoKey]: crate::model::CryptoKey
2289 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2290 /// [google.cloud.kms.v1.KeyManagementService.DeleteCryptoKeyVersion]: crate::client::KeyManagementService::delete_crypto_key_version
2291 ///
2292 /// # Long running operations
2293 ///
2294 /// This method is used to start, and/or poll a [long-running Operation].
2295 /// The [Working with long-running operations] chapter in the [user guide]
2296 /// covers these operations in detail.
2297 ///
2298 /// [long-running operation]: https://google.aip.dev/151
2299 /// [user guide]: https://googleapis.github.io/google-cloud-rust/
2300 /// [working with long-running operations]: https://googleapis.github.io/google-cloud-rust/working_with_long_running_operations.html
2301 ///
2302 /// # Example
2303 /// ```
2304 /// # use google_cloud_kms_v1::client::KeyManagementService;
2305 /// use google_cloud_lro::Poller;
2306 /// use google_cloud_kms_v1::Result;
2307 /// async fn sample(
2308 /// client: &KeyManagementService, project_id: &str, location_id: &str, key_ring_id: &str, crypto_key_id: &str
2309 /// ) -> Result<()> {
2310 /// client.delete_crypto_key()
2311 /// .set_name(format!("projects/{project_id}/locations/{location_id}/keyRings/{key_ring_id}/cryptoKeys/{crypto_key_id}"))
2312 /// .poller().until_done().await?;
2313 /// Ok(())
2314 /// }
2315 /// ```
2316 pub fn delete_crypto_key(&self) -> super::builder::key_management_service::DeleteCryptoKey {
2317 super::builder::key_management_service::DeleteCryptoKey::new(self.inner.clone())
2318 }
2319
2320 /// Permanently deletes the given
2321 /// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]. Only possible if
2322 /// the version has not been previously imported and if its
2323 /// [state][google.cloud.kms.v1.CryptoKeyVersion.state] is one of
2324 /// [DESTROYED][CryptoKeyVersionState.DESTROYED],
2325 /// [IMPORT_FAILED][CryptoKeyVersionState.IMPORT_FAILED], or
2326 /// [GENERATION_FAILED][CryptoKeyVersionState.GENERATION_FAILED].
2327 /// Successfully imported
2328 /// [CryptoKeyVersions][google.cloud.kms.v1.CryptoKeyVersion] cannot be deleted
2329 /// at this time. The specified version will be immediately and permanently
2330 /// deleted upon calling this method. This action cannot be undone.
2331 ///
2332 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2333 /// [google.cloud.kms.v1.CryptoKeyVersion.state]: crate::model::CryptoKeyVersion::state
2334 ///
2335 /// # Long running operations
2336 ///
2337 /// This method is used to start, and/or poll a [long-running Operation].
2338 /// The [Working with long-running operations] chapter in the [user guide]
2339 /// covers these operations in detail.
2340 ///
2341 /// [long-running operation]: https://google.aip.dev/151
2342 /// [user guide]: https://googleapis.github.io/google-cloud-rust/
2343 /// [working with long-running operations]: https://googleapis.github.io/google-cloud-rust/working_with_long_running_operations.html
2344 ///
2345 /// # Example
2346 /// ```
2347 /// # use google_cloud_kms_v1::client::KeyManagementService;
2348 /// use google_cloud_lro::Poller;
2349 /// use google_cloud_kms_v1::Result;
2350 /// async fn sample(
2351 /// client: &KeyManagementService, project_id: &str, location_id: &str, key_ring_id: &str, crypto_key_id: &str, crypto_key_version_id: &str
2352 /// ) -> Result<()> {
2353 /// client.delete_crypto_key_version()
2354 /// .set_name(format!("projects/{project_id}/locations/{location_id}/keyRings/{key_ring_id}/cryptoKeys/{crypto_key_id}/cryptoKeyVersions/{crypto_key_version_id}"))
2355 /// .poller().until_done().await?;
2356 /// Ok(())
2357 /// }
2358 /// ```
2359 pub fn delete_crypto_key_version(
2360 &self,
2361 ) -> super::builder::key_management_service::DeleteCryptoKeyVersion {
2362 super::builder::key_management_service::DeleteCryptoKeyVersion::new(self.inner.clone())
2363 }
2364
2365 /// Import wrapped key material into a
2366 /// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion].
2367 ///
2368 /// All requests must specify a [CryptoKey][google.cloud.kms.v1.CryptoKey]. If
2369 /// a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] is additionally
2370 /// specified in the request, key material will be reimported into that
2371 /// version. Otherwise, a new version will be created, and will be assigned the
2372 /// next sequential id within the [CryptoKey][google.cloud.kms.v1.CryptoKey].
2373 ///
2374 /// [google.cloud.kms.v1.CryptoKey]: crate::model::CryptoKey
2375 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2376 ///
2377 /// # Example
2378 /// ```
2379 /// # use google_cloud_kms_v1::client::KeyManagementService;
2380 /// use google_cloud_kms_v1::Result;
2381 /// async fn sample(
2382 /// client: &KeyManagementService
2383 /// ) -> Result<()> {
2384 /// let response = client.import_crypto_key_version()
2385 /// /* set fields */
2386 /// .send().await?;
2387 /// println!("response {:?}", response);
2388 /// Ok(())
2389 /// }
2390 /// ```
2391 pub fn import_crypto_key_version(
2392 &self,
2393 ) -> super::builder::key_management_service::ImportCryptoKeyVersion {
2394 super::builder::key_management_service::ImportCryptoKeyVersion::new(self.inner.clone())
2395 }
2396
2397 /// Import wrapped key material into a
2398 /// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] with a trusted
2399 /// key.
2400 ///
2401 /// All requests must specify a [CryptoKey][google.cloud.kms.v1.CryptoKey]. If
2402 /// a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] is additionally
2403 /// specified in the request, key material will be reimported into that
2404 /// version. Otherwise, a new version will be created, and will be assigned the
2405 /// next sequential id within the [CryptoKey][google.cloud.kms.v1.CryptoKey].
2406 ///
2407 /// The [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] will have
2408 /// trusted_wrapping_enabled set to true.
2409 ///
2410 /// [google.cloud.kms.v1.CryptoKey]: crate::model::CryptoKey
2411 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2412 ///
2413 /// # Example
2414 /// ```
2415 /// # use google_cloud_kms_v1::client::KeyManagementService;
2416 /// use google_cloud_kms_v1::Result;
2417 /// async fn sample(
2418 /// client: &KeyManagementService
2419 /// ) -> Result<()> {
2420 /// let response = client.import_trusted_key_wrapped_crypto_key_version()
2421 /// /* set fields */
2422 /// .send().await?;
2423 /// println!("response {:?}", response);
2424 /// Ok(())
2425 /// }
2426 /// ```
2427 pub fn import_trusted_key_wrapped_crypto_key_version(
2428 &self,
2429 ) -> super::builder::key_management_service::ImportTrustedKeyWrappedCryptoKeyVersion {
2430 super::builder::key_management_service::ImportTrustedKeyWrappedCryptoKeyVersion::new(
2431 self.inner.clone(),
2432 )
2433 }
2434
2435 /// Exports a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] with a
2436 /// trusted key.
2437 ///
2438 /// The [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] must have
2439 /// trusted_wrapping_enabled set to true. The
2440 /// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] of the
2441 /// [wrapping_key] must have the
2442 /// [AES_WRAPPING][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.AES_WRAPPING]
2443 /// purpose. The [wrapping_key] must have the
2444 /// [AES_256_KWP][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionAlgorithm.AES_256_KWP]
2445 /// algorithm.
2446 ///
2447 /// [google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.AES_WRAPPING]: crate::model::crypto_key::CryptoKeyPurpose::AesWrapping
2448 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2449 /// [google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionAlgorithm.AES_256_KWP]: crate::model::crypto_key_version::CryptoKeyVersionAlgorithm::Aes256Kwp
2450 ///
2451 /// # Example
2452 /// ```
2453 /// # use google_cloud_kms_v1::client::KeyManagementService;
2454 /// use google_cloud_kms_v1::Result;
2455 /// async fn sample(
2456 /// client: &KeyManagementService
2457 /// ) -> Result<()> {
2458 /// let response = client.export_trusted_key_wrapped_crypto_key_version()
2459 /// /* set fields */
2460 /// .send().await?;
2461 /// println!("response {:?}", response);
2462 /// Ok(())
2463 /// }
2464 /// ```
2465 pub fn export_trusted_key_wrapped_crypto_key_version(
2466 &self,
2467 ) -> super::builder::key_management_service::ExportTrustedKeyWrappedCryptoKeyVersion {
2468 super::builder::key_management_service::ExportTrustedKeyWrappedCryptoKeyVersion::new(
2469 self.inner.clone(),
2470 )
2471 }
2472
2473 /// Create a new [ImportJob][google.cloud.kms.v1.ImportJob] within a
2474 /// [KeyRing][google.cloud.kms.v1.KeyRing].
2475 ///
2476 /// [ImportJob.import_method][google.cloud.kms.v1.ImportJob.import_method] is
2477 /// required.
2478 ///
2479 /// [google.cloud.kms.v1.ImportJob]: crate::model::ImportJob
2480 /// [google.cloud.kms.v1.ImportJob.import_method]: crate::model::ImportJob::import_method
2481 /// [google.cloud.kms.v1.KeyRing]: crate::model::KeyRing
2482 ///
2483 /// # Example
2484 /// ```
2485 /// # use google_cloud_kms_v1::client::KeyManagementService;
2486 /// use google_cloud_kms_v1::model::ImportJob;
2487 /// use google_cloud_kms_v1::Result;
2488 /// async fn sample(
2489 /// client: &KeyManagementService, project_id: &str, location_id: &str, key_ring_id: &str
2490 /// ) -> Result<()> {
2491 /// let response = client.create_import_job()
2492 /// .set_parent(format!("projects/{project_id}/locations/{location_id}/keyRings/{key_ring_id}"))
2493 /// .set_import_job(
2494 /// ImportJob::new()/* set fields */
2495 /// )
2496 /// .send().await?;
2497 /// println!("response {:?}", response);
2498 /// Ok(())
2499 /// }
2500 /// ```
2501 pub fn create_import_job(&self) -> super::builder::key_management_service::CreateImportJob {
2502 super::builder::key_management_service::CreateImportJob::new(self.inner.clone())
2503 }
2504
2505 /// Update a [CryptoKey][google.cloud.kms.v1.CryptoKey].
2506 ///
2507 /// [google.cloud.kms.v1.CryptoKey]: crate::model::CryptoKey
2508 ///
2509 /// # Example
2510 /// ```
2511 /// # use google_cloud_kms_v1::client::KeyManagementService;
2512 /// # extern crate wkt as google_cloud_wkt;
2513 /// use google_cloud_wkt::FieldMask;
2514 /// use google_cloud_kms_v1::model::CryptoKey;
2515 /// use google_cloud_kms_v1::Result;
2516 /// async fn sample(
2517 /// client: &KeyManagementService, project_id: &str, location_id: &str, key_ring_id: &str, crypto_key_id: &str
2518 /// ) -> Result<()> {
2519 /// let response = client.update_crypto_key()
2520 /// .set_crypto_key(
2521 /// CryptoKey::new().set_name(format!("projects/{project_id}/locations/{location_id}/keyRings/{key_ring_id}/cryptoKeys/{crypto_key_id}"))/* set fields */
2522 /// )
2523 /// .set_update_mask(FieldMask::default().set_paths(["updated.field.path1", "updated.field.path2"]))
2524 /// .send().await?;
2525 /// println!("response {:?}", response);
2526 /// Ok(())
2527 /// }
2528 /// ```
2529 pub fn update_crypto_key(&self) -> super::builder::key_management_service::UpdateCryptoKey {
2530 super::builder::key_management_service::UpdateCryptoKey::new(self.inner.clone())
2531 }
2532
2533 /// Update a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]'s
2534 /// metadata.
2535 ///
2536 /// [state][google.cloud.kms.v1.CryptoKeyVersion.state] may be changed between
2537 /// [ENABLED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.ENABLED]
2538 /// and
2539 /// [DISABLED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DISABLED]
2540 /// using this method. See
2541 /// [DestroyCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.DestroyCryptoKeyVersion]
2542 /// and
2543 /// [RestoreCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.RestoreCryptoKeyVersion]
2544 /// to move between other states.
2545 ///
2546 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2547 /// [google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DISABLED]: crate::model::crypto_key_version::CryptoKeyVersionState::Disabled
2548 /// [google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.ENABLED]: crate::model::crypto_key_version::CryptoKeyVersionState::Enabled
2549 /// [google.cloud.kms.v1.CryptoKeyVersion.state]: crate::model::CryptoKeyVersion::state
2550 /// [google.cloud.kms.v1.KeyManagementService.DestroyCryptoKeyVersion]: crate::client::KeyManagementService::destroy_crypto_key_version
2551 /// [google.cloud.kms.v1.KeyManagementService.RestoreCryptoKeyVersion]: crate::client::KeyManagementService::restore_crypto_key_version
2552 ///
2553 /// # Example
2554 /// ```
2555 /// # use google_cloud_kms_v1::client::KeyManagementService;
2556 /// # extern crate wkt as google_cloud_wkt;
2557 /// use google_cloud_wkt::FieldMask;
2558 /// use google_cloud_kms_v1::model::CryptoKeyVersion;
2559 /// use google_cloud_kms_v1::Result;
2560 /// async fn sample(
2561 /// client: &KeyManagementService, project_id: &str, location_id: &str, key_ring_id: &str, crypto_key_id: &str, crypto_key_version_id: &str
2562 /// ) -> Result<()> {
2563 /// let response = client.update_crypto_key_version()
2564 /// .set_crypto_key_version(
2565 /// CryptoKeyVersion::new().set_name(format!("projects/{project_id}/locations/{location_id}/keyRings/{key_ring_id}/cryptoKeys/{crypto_key_id}/cryptoKeyVersions/{crypto_key_version_id}"))/* set fields */
2566 /// )
2567 /// .set_update_mask(FieldMask::default().set_paths(["updated.field.path1", "updated.field.path2"]))
2568 /// .send().await?;
2569 /// println!("response {:?}", response);
2570 /// Ok(())
2571 /// }
2572 /// ```
2573 pub fn update_crypto_key_version(
2574 &self,
2575 ) -> super::builder::key_management_service::UpdateCryptoKeyVersion {
2576 super::builder::key_management_service::UpdateCryptoKeyVersion::new(self.inner.clone())
2577 }
2578
2579 /// Update the version of a [CryptoKey][google.cloud.kms.v1.CryptoKey] that
2580 /// will be used in
2581 /// [Encrypt][google.cloud.kms.v1.KeyManagementService.Encrypt].
2582 ///
2583 /// Returns an error if called on a key whose purpose is not
2584 /// [ENCRYPT_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ENCRYPT_DECRYPT].
2585 ///
2586 /// [google.cloud.kms.v1.CryptoKey]: crate::model::CryptoKey
2587 /// [google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ENCRYPT_DECRYPT]: crate::model::crypto_key::CryptoKeyPurpose::EncryptDecrypt
2588 /// [google.cloud.kms.v1.KeyManagementService.Encrypt]: crate::client::KeyManagementService::encrypt
2589 ///
2590 /// # Example
2591 /// ```
2592 /// # use google_cloud_kms_v1::client::KeyManagementService;
2593 /// use google_cloud_kms_v1::Result;
2594 /// async fn sample(
2595 /// client: &KeyManagementService
2596 /// ) -> Result<()> {
2597 /// let response = client.update_crypto_key_primary_version()
2598 /// /* set fields */
2599 /// .send().await?;
2600 /// println!("response {:?}", response);
2601 /// Ok(())
2602 /// }
2603 /// ```
2604 pub fn update_crypto_key_primary_version(
2605 &self,
2606 ) -> super::builder::key_management_service::UpdateCryptoKeyPrimaryVersion {
2607 super::builder::key_management_service::UpdateCryptoKeyPrimaryVersion::new(
2608 self.inner.clone(),
2609 )
2610 }
2611
2612 /// Schedule a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] for
2613 /// destruction.
2614 ///
2615 /// Upon calling this method,
2616 /// [CryptoKeyVersion.state][google.cloud.kms.v1.CryptoKeyVersion.state] will
2617 /// be set to
2618 /// [DESTROY_SCHEDULED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DESTROY_SCHEDULED],
2619 /// and [destroy_time][google.cloud.kms.v1.CryptoKeyVersion.destroy_time] will
2620 /// be set to the time
2621 /// [destroy_scheduled_duration][google.cloud.kms.v1.CryptoKey.destroy_scheduled_duration]
2622 /// in the future. At that time, the
2623 /// [state][google.cloud.kms.v1.CryptoKeyVersion.state] will automatically
2624 /// change to
2625 /// [DESTROYED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DESTROYED],
2626 /// and the key material will be irrevocably destroyed.
2627 ///
2628 /// Before the
2629 /// [destroy_time][google.cloud.kms.v1.CryptoKeyVersion.destroy_time] is
2630 /// reached,
2631 /// [RestoreCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.RestoreCryptoKeyVersion]
2632 /// may be called to reverse the process.
2633 ///
2634 /// [google.cloud.kms.v1.CryptoKey.destroy_scheduled_duration]: crate::model::CryptoKey::destroy_scheduled_duration
2635 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2636 /// [google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DESTROYED]: crate::model::crypto_key_version::CryptoKeyVersionState::Destroyed
2637 /// [google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DESTROY_SCHEDULED]: crate::model::crypto_key_version::CryptoKeyVersionState::DestroyScheduled
2638 /// [google.cloud.kms.v1.CryptoKeyVersion.destroy_time]: crate::model::CryptoKeyVersion::destroy_time
2639 /// [google.cloud.kms.v1.CryptoKeyVersion.state]: crate::model::CryptoKeyVersion::state
2640 /// [google.cloud.kms.v1.KeyManagementService.RestoreCryptoKeyVersion]: crate::client::KeyManagementService::restore_crypto_key_version
2641 ///
2642 /// # Example
2643 /// ```
2644 /// # use google_cloud_kms_v1::client::KeyManagementService;
2645 /// use google_cloud_kms_v1::Result;
2646 /// async fn sample(
2647 /// client: &KeyManagementService
2648 /// ) -> Result<()> {
2649 /// let response = client.destroy_crypto_key_version()
2650 /// /* set fields */
2651 /// .send().await?;
2652 /// println!("response {:?}", response);
2653 /// Ok(())
2654 /// }
2655 /// ```
2656 pub fn destroy_crypto_key_version(
2657 &self,
2658 ) -> super::builder::key_management_service::DestroyCryptoKeyVersion {
2659 super::builder::key_management_service::DestroyCryptoKeyVersion::new(self.inner.clone())
2660 }
2661
2662 /// Restore a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] in the
2663 /// [DESTROY_SCHEDULED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DESTROY_SCHEDULED]
2664 /// state.
2665 ///
2666 /// Upon restoration of the CryptoKeyVersion,
2667 /// [state][google.cloud.kms.v1.CryptoKeyVersion.state] will be set to
2668 /// [DISABLED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DISABLED],
2669 /// and [destroy_time][google.cloud.kms.v1.CryptoKeyVersion.destroy_time] will
2670 /// be cleared.
2671 ///
2672 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2673 /// [google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DESTROY_SCHEDULED]: crate::model::crypto_key_version::CryptoKeyVersionState::DestroyScheduled
2674 /// [google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DISABLED]: crate::model::crypto_key_version::CryptoKeyVersionState::Disabled
2675 /// [google.cloud.kms.v1.CryptoKeyVersion.destroy_time]: crate::model::CryptoKeyVersion::destroy_time
2676 /// [google.cloud.kms.v1.CryptoKeyVersion.state]: crate::model::CryptoKeyVersion::state
2677 ///
2678 /// # Example
2679 /// ```
2680 /// # use google_cloud_kms_v1::client::KeyManagementService;
2681 /// use google_cloud_kms_v1::Result;
2682 /// async fn sample(
2683 /// client: &KeyManagementService
2684 /// ) -> Result<()> {
2685 /// let response = client.restore_crypto_key_version()
2686 /// /* set fields */
2687 /// .send().await?;
2688 /// println!("response {:?}", response);
2689 /// Ok(())
2690 /// }
2691 /// ```
2692 pub fn restore_crypto_key_version(
2693 &self,
2694 ) -> super::builder::key_management_service::RestoreCryptoKeyVersion {
2695 super::builder::key_management_service::RestoreCryptoKeyVersion::new(self.inner.clone())
2696 }
2697
2698 /// Encrypts data, so that it can only be recovered by a call to
2699 /// [Decrypt][google.cloud.kms.v1.KeyManagementService.Decrypt]. The
2700 /// [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose] must be
2701 /// [ENCRYPT_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ENCRYPT_DECRYPT].
2702 ///
2703 /// [google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ENCRYPT_DECRYPT]: crate::model::crypto_key::CryptoKeyPurpose::EncryptDecrypt
2704 /// [google.cloud.kms.v1.CryptoKey.purpose]: crate::model::CryptoKey::purpose
2705 /// [google.cloud.kms.v1.KeyManagementService.Decrypt]: crate::client::KeyManagementService::decrypt
2706 ///
2707 /// # Example
2708 /// ```
2709 /// # use google_cloud_kms_v1::client::KeyManagementService;
2710 /// use google_cloud_kms_v1::Result;
2711 /// async fn sample(
2712 /// client: &KeyManagementService
2713 /// ) -> Result<()> {
2714 /// let response = client.encrypt()
2715 /// /* set fields */
2716 /// .send().await?;
2717 /// println!("response {:?}", response);
2718 /// Ok(())
2719 /// }
2720 /// ```
2721 pub fn encrypt(&self) -> super::builder::key_management_service::Encrypt {
2722 super::builder::key_management_service::Encrypt::new(self.inner.clone())
2723 }
2724
2725 /// Decrypts data that was protected by
2726 /// [Encrypt][google.cloud.kms.v1.KeyManagementService.Encrypt]. The
2727 /// [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose] must be
2728 /// [ENCRYPT_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ENCRYPT_DECRYPT].
2729 ///
2730 /// [google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ENCRYPT_DECRYPT]: crate::model::crypto_key::CryptoKeyPurpose::EncryptDecrypt
2731 /// [google.cloud.kms.v1.CryptoKey.purpose]: crate::model::CryptoKey::purpose
2732 /// [google.cloud.kms.v1.KeyManagementService.Encrypt]: crate::client::KeyManagementService::encrypt
2733 ///
2734 /// # Example
2735 /// ```
2736 /// # use google_cloud_kms_v1::client::KeyManagementService;
2737 /// use google_cloud_kms_v1::Result;
2738 /// async fn sample(
2739 /// client: &KeyManagementService
2740 /// ) -> Result<()> {
2741 /// let response = client.decrypt()
2742 /// /* set fields */
2743 /// .send().await?;
2744 /// println!("response {:?}", response);
2745 /// Ok(())
2746 /// }
2747 /// ```
2748 pub fn decrypt(&self) -> super::builder::key_management_service::Decrypt {
2749 super::builder::key_management_service::Decrypt::new(self.inner.clone())
2750 }
2751
2752 /// Encrypts data using portable cryptographic primitives. Most users should
2753 /// choose [Encrypt][google.cloud.kms.v1.KeyManagementService.Encrypt] and
2754 /// [Decrypt][google.cloud.kms.v1.KeyManagementService.Decrypt] rather than
2755 /// their raw counterparts. The
2756 /// [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose] must be
2757 /// [RAW_ENCRYPT_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.RAW_ENCRYPT_DECRYPT].
2758 ///
2759 /// [google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.RAW_ENCRYPT_DECRYPT]: crate::model::crypto_key::CryptoKeyPurpose::RawEncryptDecrypt
2760 /// [google.cloud.kms.v1.CryptoKey.purpose]: crate::model::CryptoKey::purpose
2761 /// [google.cloud.kms.v1.KeyManagementService.Decrypt]: crate::client::KeyManagementService::decrypt
2762 /// [google.cloud.kms.v1.KeyManagementService.Encrypt]: crate::client::KeyManagementService::encrypt
2763 ///
2764 /// # Example
2765 /// ```
2766 /// # use google_cloud_kms_v1::client::KeyManagementService;
2767 /// use google_cloud_kms_v1::Result;
2768 /// async fn sample(
2769 /// client: &KeyManagementService
2770 /// ) -> Result<()> {
2771 /// let response = client.raw_encrypt()
2772 /// /* set fields */
2773 /// .send().await?;
2774 /// println!("response {:?}", response);
2775 /// Ok(())
2776 /// }
2777 /// ```
2778 pub fn raw_encrypt(&self) -> super::builder::key_management_service::RawEncrypt {
2779 super::builder::key_management_service::RawEncrypt::new(self.inner.clone())
2780 }
2781
2782 /// Decrypts data that was originally encrypted using a raw cryptographic
2783 /// mechanism. The [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose]
2784 /// must be
2785 /// [RAW_ENCRYPT_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.RAW_ENCRYPT_DECRYPT].
2786 ///
2787 /// [google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.RAW_ENCRYPT_DECRYPT]: crate::model::crypto_key::CryptoKeyPurpose::RawEncryptDecrypt
2788 /// [google.cloud.kms.v1.CryptoKey.purpose]: crate::model::CryptoKey::purpose
2789 ///
2790 /// # Example
2791 /// ```
2792 /// # use google_cloud_kms_v1::client::KeyManagementService;
2793 /// use google_cloud_kms_v1::Result;
2794 /// async fn sample(
2795 /// client: &KeyManagementService
2796 /// ) -> Result<()> {
2797 /// let response = client.raw_decrypt()
2798 /// /* set fields */
2799 /// .send().await?;
2800 /// println!("response {:?}", response);
2801 /// Ok(())
2802 /// }
2803 /// ```
2804 pub fn raw_decrypt(&self) -> super::builder::key_management_service::RawDecrypt {
2805 super::builder::key_management_service::RawDecrypt::new(self.inner.clone())
2806 }
2807
2808 /// Signs data using a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]
2809 /// with [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose]
2810 /// ASYMMETRIC_SIGN, producing a signature that can be verified with the public
2811 /// key retrieved from
2812 /// [GetPublicKey][google.cloud.kms.v1.KeyManagementService.GetPublicKey].
2813 ///
2814 /// [google.cloud.kms.v1.CryptoKey.purpose]: crate::model::CryptoKey::purpose
2815 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2816 /// [google.cloud.kms.v1.KeyManagementService.GetPublicKey]: crate::client::KeyManagementService::get_public_key
2817 ///
2818 /// # Example
2819 /// ```
2820 /// # use google_cloud_kms_v1::client::KeyManagementService;
2821 /// use google_cloud_kms_v1::Result;
2822 /// async fn sample(
2823 /// client: &KeyManagementService
2824 /// ) -> Result<()> {
2825 /// let response = client.asymmetric_sign()
2826 /// /* set fields */
2827 /// .send().await?;
2828 /// println!("response {:?}", response);
2829 /// Ok(())
2830 /// }
2831 /// ```
2832 pub fn asymmetric_sign(&self) -> super::builder::key_management_service::AsymmetricSign {
2833 super::builder::key_management_service::AsymmetricSign::new(self.inner.clone())
2834 }
2835
2836 /// Decrypts data that was encrypted with a public key retrieved from
2837 /// [GetPublicKey][google.cloud.kms.v1.KeyManagementService.GetPublicKey]
2838 /// corresponding to a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]
2839 /// with [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose]
2840 /// ASYMMETRIC_DECRYPT.
2841 ///
2842 /// [google.cloud.kms.v1.CryptoKey.purpose]: crate::model::CryptoKey::purpose
2843 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2844 /// [google.cloud.kms.v1.KeyManagementService.GetPublicKey]: crate::client::KeyManagementService::get_public_key
2845 ///
2846 /// # Example
2847 /// ```
2848 /// # use google_cloud_kms_v1::client::KeyManagementService;
2849 /// use google_cloud_kms_v1::Result;
2850 /// async fn sample(
2851 /// client: &KeyManagementService
2852 /// ) -> Result<()> {
2853 /// let response = client.asymmetric_decrypt()
2854 /// /* set fields */
2855 /// .send().await?;
2856 /// println!("response {:?}", response);
2857 /// Ok(())
2858 /// }
2859 /// ```
2860 pub fn asymmetric_decrypt(&self) -> super::builder::key_management_service::AsymmetricDecrypt {
2861 super::builder::key_management_service::AsymmetricDecrypt::new(self.inner.clone())
2862 }
2863
2864 /// Signs data using a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]
2865 /// with [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose] MAC,
2866 /// producing a tag that can be verified by another source with the same key.
2867 ///
2868 /// [google.cloud.kms.v1.CryptoKey.purpose]: crate::model::CryptoKey::purpose
2869 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2870 ///
2871 /// # Example
2872 /// ```
2873 /// # use google_cloud_kms_v1::client::KeyManagementService;
2874 /// use google_cloud_kms_v1::Result;
2875 /// async fn sample(
2876 /// client: &KeyManagementService
2877 /// ) -> Result<()> {
2878 /// let response = client.mac_sign()
2879 /// /* set fields */
2880 /// .send().await?;
2881 /// println!("response {:?}", response);
2882 /// Ok(())
2883 /// }
2884 /// ```
2885 pub fn mac_sign(&self) -> super::builder::key_management_service::MacSign {
2886 super::builder::key_management_service::MacSign::new(self.inner.clone())
2887 }
2888
2889 /// Verifies MAC tag using a
2890 /// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] with
2891 /// [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose] MAC, and returns
2892 /// a response that indicates whether or not the verification was successful.
2893 ///
2894 /// [google.cloud.kms.v1.CryptoKey.purpose]: crate::model::CryptoKey::purpose
2895 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2896 ///
2897 /// # Example
2898 /// ```
2899 /// # use google_cloud_kms_v1::client::KeyManagementService;
2900 /// use google_cloud_kms_v1::Result;
2901 /// async fn sample(
2902 /// client: &KeyManagementService
2903 /// ) -> Result<()> {
2904 /// let response = client.mac_verify()
2905 /// /* set fields */
2906 /// .send().await?;
2907 /// println!("response {:?}", response);
2908 /// Ok(())
2909 /// }
2910 /// ```
2911 pub fn mac_verify(&self) -> super::builder::key_management_service::MacVerify {
2912 super::builder::key_management_service::MacVerify::new(self.inner.clone())
2913 }
2914
2915 /// Decapsulates data that was encapsulated with a public key retrieved from
2916 /// [GetPublicKey][google.cloud.kms.v1.KeyManagementService.GetPublicKey]
2917 /// corresponding to a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]
2918 /// with [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose]
2919 /// KEY_ENCAPSULATION.
2920 ///
2921 /// [google.cloud.kms.v1.CryptoKey.purpose]: crate::model::CryptoKey::purpose
2922 /// [google.cloud.kms.v1.CryptoKeyVersion]: crate::model::CryptoKeyVersion
2923 /// [google.cloud.kms.v1.KeyManagementService.GetPublicKey]: crate::client::KeyManagementService::get_public_key
2924 ///
2925 /// # Example
2926 /// ```
2927 /// # use google_cloud_kms_v1::client::KeyManagementService;
2928 /// use google_cloud_kms_v1::Result;
2929 /// async fn sample(
2930 /// client: &KeyManagementService
2931 /// ) -> Result<()> {
2932 /// let response = client.decapsulate()
2933 /// /* set fields */
2934 /// .send().await?;
2935 /// println!("response {:?}", response);
2936 /// Ok(())
2937 /// }
2938 /// ```
2939 pub fn decapsulate(&self) -> super::builder::key_management_service::Decapsulate {
2940 super::builder::key_management_service::Decapsulate::new(self.inner.clone())
2941 }
2942
2943 /// Generate random bytes using the Cloud KMS randomness source in the provided
2944 /// location.
2945 ///
2946 /// # Example
2947 /// ```
2948 /// # use google_cloud_kms_v1::client::KeyManagementService;
2949 /// use google_cloud_kms_v1::Result;
2950 /// async fn sample(
2951 /// client: &KeyManagementService
2952 /// ) -> Result<()> {
2953 /// let response = client.generate_random_bytes()
2954 /// /* set fields */
2955 /// .send().await?;
2956 /// println!("response {:?}", response);
2957 /// Ok(())
2958 /// }
2959 /// ```
2960 pub fn generate_random_bytes(
2961 &self,
2962 ) -> super::builder::key_management_service::GenerateRandomBytes {
2963 super::builder::key_management_service::GenerateRandomBytes::new(self.inner.clone())
2964 }
2965
2966 /// Lists information about the supported locations for this service.
2967 ///
2968 /// This method lists locations based on the resource scope provided in
2969 /// the [ListLocationsRequest.name][google.cloud.location.ListLocationsRequest.name] field: *
2970 /// **Global locations**: If `name` is empty, the method lists the
2971 /// public locations available to all projects. * **Project-specific
2972 /// locations**: If `name` follows the format
2973 /// `projects/{project}`, the method lists locations visible to that
2974 /// specific project. This includes public, private, or other
2975 /// project-specific locations enabled for the project.
2976 ///
2977 /// For gRPC and client library implementations, the resource name is
2978 /// passed as the `name` field. For direct service calls, the resource
2979 /// name is
2980 /// incorporated into the request path based on the specific service
2981 /// implementation and version.
2982 ///
2983 /// [google.cloud.location.ListLocationsRequest.name]: google_cloud_location::model::ListLocationsRequest::name
2984 ///
2985 /// # Example
2986 /// ```
2987 /// # use google_cloud_kms_v1::client::KeyManagementService;
2988 /// use google_cloud_gax::paginator::ItemPaginator as _;
2989 /// use google_cloud_kms_v1::Result;
2990 /// async fn sample(
2991 /// client: &KeyManagementService
2992 /// ) -> Result<()> {
2993 /// let mut list = client.list_locations()
2994 /// /* set fields */
2995 /// .by_item();
2996 /// while let Some(item) = list.next().await.transpose()? {
2997 /// println!("{:?}", item);
2998 /// }
2999 /// Ok(())
3000 /// }
3001 /// ```
3002 pub fn list_locations(&self) -> super::builder::key_management_service::ListLocations {
3003 super::builder::key_management_service::ListLocations::new(self.inner.clone())
3004 }
3005
3006 /// Gets information about a location.
3007 ///
3008 /// # Example
3009 /// ```
3010 /// # use google_cloud_kms_v1::client::KeyManagementService;
3011 /// use google_cloud_kms_v1::Result;
3012 /// async fn sample(
3013 /// client: &KeyManagementService
3014 /// ) -> Result<()> {
3015 /// let response = client.get_location()
3016 /// /* set fields */
3017 /// .send().await?;
3018 /// println!("response {:?}", response);
3019 /// Ok(())
3020 /// }
3021 /// ```
3022 pub fn get_location(&self) -> super::builder::key_management_service::GetLocation {
3023 super::builder::key_management_service::GetLocation::new(self.inner.clone())
3024 }
3025
3026 /// Sets the access control policy on the specified resource. Replaces
3027 /// any existing policy.
3028 ///
3029 /// Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`
3030 /// errors.
3031 ///
3032 /// # Example
3033 /// ```
3034 /// # use google_cloud_kms_v1::client::KeyManagementService;
3035 /// use google_cloud_kms_v1::Result;
3036 /// async fn sample(
3037 /// client: &KeyManagementService
3038 /// ) -> Result<()> {
3039 /// let response = client.set_iam_policy()
3040 /// /* set fields */
3041 /// .send().await?;
3042 /// println!("response {:?}", response);
3043 /// Ok(())
3044 /// }
3045 /// ```
3046 pub fn set_iam_policy(&self) -> super::builder::key_management_service::SetIamPolicy {
3047 super::builder::key_management_service::SetIamPolicy::new(self.inner.clone())
3048 }
3049
3050 /// Gets the access control policy for a resource. Returns an empty policy
3051 /// if the resource exists and does not have a policy set.
3052 ///
3053 /// # Example
3054 /// ```
3055 /// # use google_cloud_kms_v1::client::KeyManagementService;
3056 /// use google_cloud_kms_v1::Result;
3057 /// async fn sample(
3058 /// client: &KeyManagementService
3059 /// ) -> Result<()> {
3060 /// let response = client.get_iam_policy()
3061 /// /* set fields */
3062 /// .send().await?;
3063 /// println!("response {:?}", response);
3064 /// Ok(())
3065 /// }
3066 /// ```
3067 pub fn get_iam_policy(&self) -> super::builder::key_management_service::GetIamPolicy {
3068 super::builder::key_management_service::GetIamPolicy::new(self.inner.clone())
3069 }
3070
3071 /// Returns permissions that a caller has on the specified resource. If the
3072 /// resource does not exist, this will return an empty set of
3073 /// permissions, not a `NOT_FOUND` error.
3074 ///
3075 /// Note: This operation is designed to be used for building
3076 /// permission-aware UIs and command-line tools, not for authorization
3077 /// checking. This operation may "fail open" without warning.
3078 ///
3079 /// # Example
3080 /// ```
3081 /// # use google_cloud_kms_v1::client::KeyManagementService;
3082 /// use google_cloud_kms_v1::Result;
3083 /// async fn sample(
3084 /// client: &KeyManagementService
3085 /// ) -> Result<()> {
3086 /// let response = client.test_iam_permissions()
3087 /// /* set fields */
3088 /// .send().await?;
3089 /// println!("response {:?}", response);
3090 /// Ok(())
3091 /// }
3092 /// ```
3093 pub fn test_iam_permissions(
3094 &self,
3095 ) -> super::builder::key_management_service::TestIamPermissions {
3096 super::builder::key_management_service::TestIamPermissions::new(self.inner.clone())
3097 }
3098
3099 /// Provides the [Operations][google.longrunning.Operations] service functionality in this service.
3100 ///
3101 /// [google.longrunning.Operations]: google-cloud-longrunning::client::Operations
3102 ///
3103 /// # Example
3104 /// ```
3105 /// # use google_cloud_kms_v1::client::KeyManagementService;
3106 /// use google_cloud_kms_v1::Result;
3107 /// async fn sample(
3108 /// client: &KeyManagementService
3109 /// ) -> Result<()> {
3110 /// let response = client.get_operation()
3111 /// /* set fields */
3112 /// .send().await?;
3113 /// println!("response {:?}", response);
3114 /// Ok(())
3115 /// }
3116 /// ```
3117 pub fn get_operation(&self) -> super::builder::key_management_service::GetOperation {
3118 super::builder::key_management_service::GetOperation::new(self.inner.clone())
3119 }
3120}