google_cloud_artifact_registry/grpc/apiv1/
artifact_registry_client.rs

1use google_cloud_gax::conn::Channel;
2use google_cloud_gax::create_request;
3use google_cloud_gax::grpc::{Code, Status};
4use google_cloud_gax::retry::{invoke_fn, RetrySetting};
5use google_cloud_googleapis::devtools::artifact_registry::v1::artifact_registry_client::ArtifactRegistryClient;
6use google_cloud_googleapis::devtools::artifact_registry::v1::{
7    CreateRepositoryRequest, CreateTagRequest, DeletePackageRequest, DeleteRepositoryRequest, DeleteTagRequest,
8    DeleteVersionRequest, DockerImage, File, GetDockerImageRequest, GetFileRequest, GetMavenArtifactRequest,
9    GetNpmPackageRequest, GetPackageRequest, GetProjectSettingsRequest, GetPythonPackageRequest, GetRepositoryRequest,
10    GetTagRequest, GetVersionRequest, ImportAptArtifactsRequest, ImportAptArtifactsResponse, ImportYumArtifactsRequest,
11    ListDockerImagesRequest, ListDockerImagesResponse, ListFilesRequest, ListFilesResponse, ListMavenArtifactsRequest,
12    ListMavenArtifactsResponse, ListNpmPackagesRequest, ListNpmPackagesResponse, ListPackagesRequest,
13    ListPackagesResponse, ListPythonPackagesRequest, ListPythonPackagesResponse, ListRepositoriesRequest,
14    ListRepositoriesResponse, ListTagsRequest, ListTagsResponse, ListVersionsRequest, ListVersionsResponse,
15    MavenArtifact, NpmPackage, Package, ProjectSettings, PythonPackage, Repository, Tag, UpdateProjectSettingsRequest,
16    UpdateRepositoryRequest, UpdateTagRequest, Version, YumArtifact,
17};
18use google_cloud_googleapis::iam::v1::{GetIamPolicyRequest, Policy, SetIamPolicyRequest, TestIamPermissionsRequest};
19use google_cloud_longrunning::autogen::operations_client::OperationsClient;
20use google_cloud_longrunning::longrunning::Operation;
21use std::time::Duration;
22
23fn default_setting() -> RetrySetting {
24    RetrySetting {
25        from_millis: 50,
26        max_delay: Some(Duration::from_secs(60)),
27        factor: 1u64,
28        take: 20,
29        codes: vec![Code::Unavailable, Code::Unknown],
30    }
31}
32
33#[derive(Clone)]
34pub struct Client {
35    inner: ArtifactRegistryClient<Channel>,
36    lro_client: OperationsClient,
37}
38
39impl Client {
40    pub fn new(inner: ArtifactRegistryClient<Channel>, lro_client: OperationsClient) -> Self {
41        Self {
42            inner: inner.max_decoding_message_size(i32::MAX as usize),
43            lro_client,
44        }
45    }
46
47    /// Get project settings
48    ///
49    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#getprojectsettingsrequest
50    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects/getProjectSettings
51    ///
52    /// Note: This v1 endpoint doesn't seem to be working. V1 beta to be used or wait for next version.
53    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
54    pub async fn get_project_settings(
55        &mut self,
56        req: GetProjectSettingsRequest,
57        retry: Option<RetrySetting>,
58    ) -> Result<ProjectSettings, Status> {
59        let setting = retry.unwrap_or_else(default_setting);
60
61        invoke_fn(
62            Some(setting),
63            |client| async {
64                let request = create_request(format!("name={}", req.name), req.clone());
65                client
66                    .get_project_settings(request)
67                    .await
68                    .map(|s| s.into_inner())
69                    .map_err(|e| (e, client))
70            },
71            &mut self.inner,
72        )
73        .await
74    }
75
76    /// Update project settings
77    ///
78    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#updateprojectsettingsrequest
79    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects/updateProjectSettings
80    ///
81    /// Note: This v1 endpoint doesn't seem to be working. V1 beta to be used or wait for next version.
82    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
83    pub async fn update_project_settings(
84        &mut self,
85        req: UpdateProjectSettingsRequest,
86        retry: Option<RetrySetting>,
87    ) -> Result<ProjectSettings, Status> {
88        let setting = retry.unwrap_or_else(default_setting);
89        let project_settings_name = match req.project_settings {
90            None => "".to_string(),
91            Some(ref s) => s.name.to_string(),
92        };
93
94        invoke_fn(
95            Some(setting),
96            |client| async {
97                let request = create_request(format!("project_settings.name={}", project_settings_name), req.clone());
98                client
99                    .update_project_settings(request)
100                    .await
101                    .map(|s| s.into_inner())
102                    .map_err(|e| (e, client))
103            },
104            &mut self.inner,
105        )
106        .await
107    }
108
109    /// Create repository
110    ///
111    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#createrepositoryrequest
112    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories/create
113    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
114    pub async fn create_repository(
115        &mut self,
116        req: CreateRepositoryRequest,
117        retry: Option<RetrySetting>,
118    ) -> Result<Operation<Repository>, Status> {
119        let setting = retry.unwrap_or_else(default_setting);
120
121        invoke_fn(
122            Some(setting),
123            |client| async {
124                let request = create_request(format!("parent={}", req.parent), req.clone());
125                client.create_repository(request).await.map_err(|e| (e, client))
126            },
127            &mut self.inner,
128        )
129        .await
130        .map(|d| Operation::new(self.lro_client.clone(), d.into_inner()))
131    }
132
133    /// Get repository
134    ///
135    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#google.devtools.artifactregistry.v1.GetRepositoryRequest
136    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories/get
137    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
138    pub async fn get_repository(
139        &mut self,
140        req: GetRepositoryRequest,
141        retry: Option<RetrySetting>,
142    ) -> Result<Repository, Status> {
143        let setting = retry.unwrap_or_else(default_setting);
144
145        invoke_fn(
146            Some(setting),
147            |client| async {
148                let request = create_request(format!("repository.name={}", req.name), req.clone());
149                client
150                    .get_repository(request)
151                    .await
152                    .map(|r| r.into_inner())
153                    .map_err(|e| (e, client))
154            },
155            &mut self.inner,
156        )
157        .await
158    }
159
160    /// List repositories
161    ///
162    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#google.devtools.artifactregistry.v1.ListRepositoriesRequest
163    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories/list
164    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
165    pub async fn list_repositories(
166        &mut self,
167        req: ListRepositoriesRequest,
168        retry: Option<RetrySetting>,
169    ) -> Result<ListRepositoriesResponse, Status> {
170        let setting = retry.unwrap_or_else(default_setting);
171
172        invoke_fn(
173            Some(setting),
174            |client| async {
175                let request = create_request(format!("parent={}", req.parent), req.clone());
176                client
177                    .list_repositories(request)
178                    .await
179                    .map(|r| r.into_inner())
180                    .map_err(|e| (e, client))
181            },
182            &mut self.inner,
183        )
184        .await
185    }
186
187    /// Update repository
188    ///
189    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#google.devtools.artifactregistry.v1.UpdateRepositoryRequest
190    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories/patch
191    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
192    pub async fn update_repository(
193        &mut self,
194        req: UpdateRepositoryRequest,
195        retry: Option<RetrySetting>,
196    ) -> Result<Repository, Status> {
197        let setting = retry.unwrap_or_else(default_setting);
198        let repository_name = match req.repository {
199            None => "".to_string(),
200            Some(ref r) => r.name.to_string(),
201        };
202
203        invoke_fn(
204            Some(setting),
205            |client| async {
206                let request = create_request(format!("repository.name={}", repository_name), req.clone());
207                client
208                    .update_repository(request)
209                    .await
210                    .map(|r| r.into_inner())
211                    .map_err(|e| (e, client))
212            },
213            &mut self.inner,
214        )
215        .await
216    }
217
218    /// Delete repository
219    ///
220    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#google.devtools.artifactregistry.v1.DeleteRepositoryRequest
221    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories/delete
222    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
223    pub async fn delete_repository(
224        &mut self,
225        req: DeleteRepositoryRequest,
226        retry: Option<RetrySetting>,
227    ) -> Result<(), Status> {
228        let setting = retry.unwrap_or_else(default_setting);
229
230        invoke_fn(
231            Some(setting),
232            |client| async {
233                let request = create_request(format!("name={}", req.name), req.clone());
234                client
235                    .delete_repository(request)
236                    .await
237                    .map(|_r| ())
238                    .map_err(|e| (e, client))
239            },
240            &mut self.inner,
241        )
242        .await
243    }
244
245    /// Get IAM policy
246    ///
247    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#google.devtools.artifactregistry.v1.ArtifactRegistry.GetIamPolicy
248    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories/getIamPolicy
249    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
250    pub async fn get_iam_policy(
251        &mut self,
252        req: GetIamPolicyRequest,
253        retry: Option<RetrySetting>,
254    ) -> Result<Policy, Status> {
255        let setting = retry.unwrap_or_else(default_setting);
256
257        invoke_fn(
258            Some(setting),
259            |client| async {
260                let request = create_request(format!("resource={}", req.resource), req.clone());
261                client
262                    .get_iam_policy(request)
263                    .await
264                    .map(|p| p.into_inner())
265                    .map_err(|e| (e, client))
266            },
267            &mut self.inner,
268        )
269        .await
270    }
271
272    /// Set IAM policy
273    ///
274    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#google.devtools.artifactregistry.v1.ArtifactRegistry.SetIamPolicy
275    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories/setIamPolicy
276    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
277    pub async fn set_iam_policy(
278        &mut self,
279        req: SetIamPolicyRequest,
280        retry: Option<RetrySetting>,
281    ) -> Result<Policy, Status> {
282        let setting = retry.unwrap_or_else(default_setting);
283
284        invoke_fn(
285            Some(setting),
286            |client| async {
287                let request = create_request(format!("resource={}", req.resource), req.clone());
288                client
289                    .set_iam_policy(request)
290                    .await
291                    .map(|p| p.into_inner())
292                    .map_err(|e| (e, client))
293            },
294            &mut self.inner,
295        )
296        .await
297    }
298
299    /// Get locations
300    ///
301    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.iam.v1#google.iam.v1.TestIamPermissionsRequest
302    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories/testIamPermissions
303    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
304    pub async fn test_iam_permissions(
305        &mut self,
306        req: TestIamPermissionsRequest,
307        retry: Option<RetrySetting>,
308    ) -> Result<Vec<String>, Status> {
309        let setting = retry.unwrap_or_else(default_setting);
310
311        invoke_fn(
312            Some(setting),
313            |client| async {
314                let request = create_request(format!("resource={}", req.resource), req.clone());
315                client
316                    .test_iam_permissions(request)
317                    .await
318                    .map(|s| s.into_inner().permissions)
319                    .map_err(|e| (e, client))
320            },
321            &mut self.inner,
322        )
323        .await
324    }
325
326    /// List Docker images
327    ///
328    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#listdockerimagesrequest
329    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.dockerImages/list
330    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
331    pub async fn list_docker_images(
332        &mut self,
333        req: ListDockerImagesRequest,
334        retry: Option<RetrySetting>,
335    ) -> Result<ListDockerImagesResponse, Status> {
336        let setting = retry.unwrap_or_else(default_setting);
337
338        invoke_fn(
339            Some(setting),
340            |client| async {
341                let request = create_request(format!("parent={}", req.parent), req.clone());
342                client
343                    .list_docker_images(request)
344                    .await
345                    .map(|r| r.into_inner())
346                    .map_err(|e| (e, client))
347            },
348            &mut self.inner,
349        )
350        .await
351    }
352
353    /// Get Docker image
354    ///
355    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#listdockerimagesrequest
356    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.dockerImages/get
357    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
358    pub async fn get_docker_image(
359        &mut self,
360        req: GetDockerImageRequest,
361        retry: Option<RetrySetting>,
362    ) -> Result<DockerImage, Status> {
363        let setting = retry.unwrap_or_else(default_setting);
364
365        invoke_fn(
366            Some(setting),
367            |client| async {
368                let request = create_request(format!("name={}", req.name), req.clone());
369                client
370                    .get_docker_image(request)
371                    .await
372                    .map(|r| r.into_inner())
373                    .map_err(|e| (e, client))
374            },
375            &mut self.inner,
376        )
377        .await
378    }
379
380    /// Import APT artifacts
381    ///
382    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#google.devtools.artifactregistry.v1.ImportAptArtifactsRequest
383    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.aptArtifacts/import
384    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
385    pub async fn import_apt_artifacts(
386        &mut self,
387        req: ImportAptArtifactsRequest,
388        retry: Option<RetrySetting>,
389    ) -> Result<Operation<ImportAptArtifactsResponse>, Status> {
390        let setting = retry.unwrap_or_else(default_setting);
391
392        invoke_fn(
393            Some(setting),
394            |client| async {
395                let request = create_request(format!("parent={}", req.parent), req.clone());
396                client.import_apt_artifacts(request).await.map_err(|e| (e, client))
397            },
398            &mut self.inner,
399        )
400        .await
401        .map(|d| Operation::new(self.lro_client.clone(), d.into_inner()))
402    }
403
404    /// File get
405    ///
406    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#google.devtools.artifactregistry.v1.GetFileRequest
407    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.files/get
408    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
409    pub async fn get_file(&mut self, req: GetFileRequest, retry: Option<RetrySetting>) -> Result<File, Status> {
410        let setting = retry.unwrap_or_else(default_setting);
411
412        invoke_fn(
413            Some(setting),
414            |client| async {
415                let request = create_request(format!("name={}", req.name), req.clone());
416                client
417                    .get_file(request)
418                    .await
419                    .map(|d| d.into_inner())
420                    .map_err(|e| (e, client))
421            },
422            &mut self.inner,
423        )
424        .await
425    }
426
427    /// Files list
428    ///
429    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#listfilesrequest
430    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.files/list
431    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
432    pub async fn list_files(
433        &mut self,
434        req: ListFilesRequest,
435        retry: Option<RetrySetting>,
436    ) -> Result<ListFilesResponse, Status> {
437        let setting = retry.unwrap_or_else(default_setting);
438
439        invoke_fn(
440            Some(setting),
441            |client| async {
442                let request = create_request(format!("parent={}", req.parent), req.clone());
443                client
444                    .list_files(request)
445                    .await
446                    .map(|d| d.into_inner())
447                    .map_err(|e| (e, client))
448            },
449            &mut self.inner,
450        )
451        .await
452    }
453
454    /// Maven artifact get
455    ///
456    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#getmavenartifactrequest
457    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.mavenArtifacts/get
458    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
459    pub async fn get_maven_artifact(
460        &mut self,
461        req: GetMavenArtifactRequest,
462        retry: Option<RetrySetting>,
463    ) -> Result<MavenArtifact, Status> {
464        let setting = retry.unwrap_or_else(default_setting);
465
466        invoke_fn(
467            Some(setting),
468            |client| async {
469                let request = create_request(format!("name={}", req.name), req.clone());
470                client
471                    .get_maven_artifact(request)
472                    .await
473                    .map(|d| d.into_inner())
474                    .map_err(|e| (e, client))
475            },
476            &mut self.inner,
477        )
478        .await
479    }
480
481    /// Maven artifacts list
482    ///
483    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#listmavenartifactsrequest
484    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.mavenArtifacts/list
485    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
486    pub async fn list_maven_artifacts(
487        &mut self,
488        req: ListMavenArtifactsRequest,
489        retry: Option<RetrySetting>,
490    ) -> Result<ListMavenArtifactsResponse, Status> {
491        let setting = retry.unwrap_or_else(default_setting);
492
493        invoke_fn(
494            Some(setting),
495            |client| async {
496                let request = create_request(format!("parent={}", req.parent), req.clone());
497                client
498                    .list_maven_artifacts(request)
499                    .await
500                    .map(|d| d.into_inner())
501                    .map_err(|e| (e, client))
502            },
503            &mut self.inner,
504        )
505        .await
506    }
507
508    /// NPM package get
509    ///
510    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#getnpmpackagerequest
511    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.npmPackages/get
512    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
513    pub async fn get_npm_package(
514        &mut self,
515        req: GetNpmPackageRequest,
516        retry: Option<RetrySetting>,
517    ) -> Result<NpmPackage, Status> {
518        let setting = retry.unwrap_or_else(default_setting);
519
520        invoke_fn(
521            Some(setting),
522            |client| async {
523                let request = create_request(format!("name={}", req.name), req.clone());
524                client
525                    .get_npm_package(request)
526                    .await
527                    .map(|d| d.into_inner())
528                    .map_err(|e| (e, client))
529            },
530            &mut self.inner,
531        )
532        .await
533    }
534
535    /// NPM packages list
536    ///
537    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#listnpmpackagesrequest
538    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.npmPackages/list
539    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
540    pub async fn list_npm_packages(
541        &mut self,
542        req: ListNpmPackagesRequest,
543        retry: Option<RetrySetting>,
544    ) -> Result<ListNpmPackagesResponse, Status> {
545        let setting = retry.unwrap_or_else(default_setting);
546
547        invoke_fn(
548            Some(setting),
549            |client| async {
550                let request = create_request(format!("parent={}", req.parent), req.clone());
551                client
552                    .list_npm_packages(request)
553                    .await
554                    .map(|d| d.into_inner())
555                    .map_err(|e| (e, client))
556            },
557            &mut self.inner,
558        )
559        .await
560    }
561
562    /// Package delete
563    ///
564    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#google.devtools.artifactregistry.v1.DeletePackageRequest
565    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.packages/delete
566    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
567    pub async fn delete_package(
568        &mut self,
569        req: DeletePackageRequest,
570        retry: Option<RetrySetting>,
571    ) -> Result<(), Status> {
572        let setting = retry.unwrap_or_else(default_setting);
573
574        invoke_fn(
575            Some(setting),
576            |client| async {
577                let request = create_request(format!("name={}", req.name), req.clone());
578                client
579                    .delete_package(request)
580                    .await
581                    .map(|_o| ())
582                    .map_err(|e| (e, client))
583            },
584            &mut self.inner,
585        )
586        .await
587    }
588
589    /// Package get
590    ///
591    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#google.devtools.artifactregistry.v1.GetPackageRequest
592    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.packages/get
593    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
594    pub async fn get_package(
595        &mut self,
596        req: GetPackageRequest,
597        retry: Option<RetrySetting>,
598    ) -> Result<Package, Status> {
599        let setting = retry.unwrap_or_else(default_setting);
600
601        invoke_fn(
602            Some(setting),
603            |client| async {
604                let request = create_request(format!("name={}", req.name), req.clone());
605                client
606                    .get_package(request)
607                    .await
608                    .map(|o| o.into_inner())
609                    .map_err(|e| (e, client))
610            },
611            &mut self.inner,
612        )
613        .await
614    }
615
616    /// Packages list
617    ///
618    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#google.devtools.artifactregistry.v1.ListPackagesRequest
619    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.packages/list
620    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
621    pub async fn list_packages(
622        &mut self,
623        req: ListPackagesRequest,
624        retry: Option<RetrySetting>,
625    ) -> Result<ListPackagesResponse, Status> {
626        let setting = retry.unwrap_or_else(default_setting);
627
628        invoke_fn(
629            Some(setting),
630            |client| async {
631                let request = create_request(format!("parent={}", req.parent), req.clone());
632                client
633                    .list_packages(request)
634                    .await
635                    .map(|r| r.into_inner())
636                    .map_err(|e| (e, client))
637            },
638            &mut self.inner,
639        )
640        .await
641    }
642
643    /// Package Tag create
644    ///
645    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#createtagrequest
646    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.packages.tags/create
647    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
648    pub async fn create_package_tag(
649        &mut self,
650        req: CreateTagRequest,
651        retry: Option<RetrySetting>,
652    ) -> Result<Tag, Status> {
653        let setting = retry.unwrap_or_else(default_setting);
654
655        invoke_fn(
656            Some(setting),
657            |client| async {
658                let request = create_request(format!("parent={}", req.parent), req.clone());
659                client
660                    .create_tag(request)
661                    .await
662                    .map(|o| o.into_inner())
663                    .map_err(|e| (e, client))
664            },
665            &mut self.inner,
666        )
667        .await
668    }
669
670    /// Package Tag get
671    ///
672    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#gettagrequest
673    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.packages.tags/get
674    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
675    pub async fn get_package_tag(&mut self, req: GetTagRequest, retry: Option<RetrySetting>) -> Result<Tag, Status> {
676        let setting = retry.unwrap_or_else(default_setting);
677
678        invoke_fn(
679            Some(setting),
680            |client| async {
681                let request = create_request(format!("name={}", req.name), req.clone());
682                client
683                    .get_tag(request)
684                    .await
685                    .map(|o| o.into_inner())
686                    .map_err(|e| (e, client))
687            },
688            &mut self.inner,
689        )
690        .await
691    }
692
693    /// Package Tag delete
694    ///
695    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#deletetagrequest
696    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.packages.tags/delete
697    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
698    pub async fn delete_package_tag(
699        &mut self,
700        req: DeleteTagRequest,
701        retry: Option<RetrySetting>,
702    ) -> Result<(), Status> {
703        let setting = retry.unwrap_or_else(default_setting);
704
705        invoke_fn(
706            Some(setting),
707            |client| async {
708                let request = create_request(format!("name={}", req.name), req.clone());
709                client
710                    .delete_tag(request)
711                    .await
712                    .map(|o| o.into_inner())
713                    .map_err(|e| (e, client))
714            },
715            &mut self.inner,
716        )
717        .await
718    }
719
720    /// Package Tag list
721    ///
722    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#listtagsrequest
723    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.packages.tags/list
724    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
725    pub async fn list_package_tags(
726        &mut self,
727        req: ListTagsRequest,
728        retry: Option<RetrySetting>,
729    ) -> Result<ListTagsResponse, Status> {
730        let setting = retry.unwrap_or_else(default_setting);
731
732        invoke_fn(
733            Some(setting),
734            |client| async {
735                let request = create_request(format!("parent={}", req.parent), req.clone());
736                client
737                    .list_tags(request)
738                    .await
739                    .map(|o| o.into_inner())
740                    .map_err(|e| (e, client))
741            },
742            &mut self.inner,
743        )
744        .await
745    }
746
747    /// Package Tag update
748    ///
749    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#updatetagrequest
750    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.packages.tags/patch
751    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
752    pub async fn update_package_tag(
753        &mut self,
754        req: UpdateTagRequest,
755        retry: Option<RetrySetting>,
756    ) -> Result<Tag, Status> {
757        let setting = retry.unwrap_or_else(default_setting);
758        let tag_name = match req.tag {
759            None => "".to_string(),
760            Some(ref t) => t.name.to_string(),
761        };
762
763        invoke_fn(
764            Some(setting),
765            |client| async {
766                let request = create_request(format!("tag.name={}", tag_name), req.clone());
767                client
768                    .update_tag(request)
769                    .await
770                    .map(|o| o.into_inner())
771                    .map_err(|e| (e, client))
772            },
773            &mut self.inner,
774        )
775        .await
776    }
777
778    /// Package Version delete
779    ///
780    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#google.devtools.artifactregistry.v1.DeleteVersionRequest
781    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.packages.versions/delete
782    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
783    pub async fn delete_package_version(
784        &mut self,
785        req: DeleteVersionRequest,
786        retry: Option<RetrySetting>,
787    ) -> Result<(), Status> {
788        let setting = retry.unwrap_or_else(default_setting);
789
790        invoke_fn(
791            Some(setting),
792            |client| async {
793                let request = create_request(format!("name={}", req.name), req.clone());
794                client
795                    .delete_version(request)
796                    .await
797                    .map(|_o| ())
798                    .map_err(|e| (e, client))
799            },
800            &mut self.inner,
801        )
802        .await
803    }
804
805    /// Package Version get
806    ///
807    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#google.devtools.artifactregistry.v1.GetVersionRequest
808    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.packages.versions/get
809    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
810    pub async fn get_package_version(
811        &mut self,
812        req: GetVersionRequest,
813        retry: Option<RetrySetting>,
814    ) -> Result<Version, Status> {
815        let setting = retry.unwrap_or_else(default_setting);
816
817        invoke_fn(
818            Some(setting),
819            |client| async {
820                let request = create_request(format!("name={}", req.name), req.clone());
821                client
822                    .get_version(request)
823                    .await
824                    .map(|r| r.into_inner())
825                    .map_err(|e| (e, client))
826            },
827            &mut self.inner,
828        )
829        .await
830    }
831
832    /// Package Version list
833    ///
834    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#google.devtools.artifactregistry.v1.ListVersionsRequest
835    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.packages.versions/list
836    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
837    pub async fn list_package_versions(
838        &mut self,
839        req: ListVersionsRequest,
840        retry: Option<RetrySetting>,
841    ) -> Result<ListVersionsResponse, Status> {
842        let setting = retry.unwrap_or_else(default_setting);
843
844        invoke_fn(
845            Some(setting),
846            |client| async {
847                let request = create_request(format!("parent={}", req.parent), req.clone());
848                client
849                    .list_versions(request)
850                    .await
851                    .map(|r| r.into_inner())
852                    .map_err(|e| (e, client))
853            },
854            &mut self.inner,
855        )
856        .await
857    }
858
859    /// Python packages list
860    ///
861    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#listpythonpackagesrequest
862    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.pythonPackages/list
863    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
864    pub async fn list_python_packages(
865        &mut self,
866        req: ListPythonPackagesRequest,
867        retry: Option<RetrySetting>,
868    ) -> Result<ListPythonPackagesResponse, Status> {
869        let setting = retry.unwrap_or_else(default_setting);
870
871        invoke_fn(
872            Some(setting),
873            |client| async {
874                let request = create_request(format!("parent={}", req.parent), req.clone());
875                client
876                    .list_python_packages(request)
877                    .await
878                    .map(|r| r.into_inner())
879                    .map_err(|e| (e, client))
880            },
881            &mut self.inner,
882        )
883        .await
884    }
885
886    /// Python package get
887    ///
888    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#getpythonpackagerequest
889    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.pythonPackages/get
890    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
891    pub async fn get_python_package(
892        &mut self,
893        req: GetPythonPackageRequest,
894        retry: Option<RetrySetting>,
895    ) -> Result<PythonPackage, Status> {
896        let setting = retry.unwrap_or_else(default_setting);
897
898        invoke_fn(
899            Some(setting),
900            |client| async {
901                let request = create_request(format!("name={}", req.name), req.clone());
902                client
903                    .get_python_package(request)
904                    .await
905                    .map(|r| r.into_inner())
906                    .map_err(|e| (e, client))
907            },
908            &mut self.inner,
909        )
910        .await
911    }
912
913    /// Yum Artifacts import
914    ///
915    /// https://cloud.google.com/artifact-registry/docs/reference/rpc/google.devtools.artifactregistry.v1#importyumartifactsrequest
916    /// REST reference: https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories.yumArtifacts/import
917    #[cfg_attr(feature = "trace", tracing::instrument(skip_all))]
918    pub async fn import_yum_artifacts(
919        &mut self,
920        req: ImportYumArtifactsRequest,
921        retry: Option<RetrySetting>,
922    ) -> Result<Operation<YumArtifact>, Status> {
923        let setting = retry.unwrap_or_else(default_setting);
924        invoke_fn(
925            Some(setting),
926            |client| async {
927                let request = create_request(format!("parent={}", req.parent), req.clone());
928                client.import_yum_artifacts(request).await.map_err(|e| (e, client))
929            },
930            &mut self.inner,
931        )
932        .await
933        .map(|d| Operation::new(self.lro_client.clone(), d.into_inner()))
934    }
935}