gitlab/api/projects/registry/
repository_tag_details.rs1use derive_builder::Builder;
8
9use crate::api::common::{self, NameOrId};
10use crate::api::endpoint_prelude::*;
11
12#[derive(Debug, Builder, Clone)]
14pub struct RepositoryTagDetails<'a> {
15 #[builder(setter(into))]
17 project: NameOrId<'a>,
18 repository_id: u64,
20 #[builder(setter(into))]
22 tag_name: Cow<'a, str>,
23}
24
25impl<'a> RepositoryTagDetails<'a> {
26 pub fn builder() -> RepositoryTagDetailsBuilder<'a> {
28 RepositoryTagDetailsBuilder::default()
29 }
30}
31
32impl Endpoint for RepositoryTagDetails<'_> {
33 fn method(&self) -> Method {
34 Method::GET
35 }
36
37 fn endpoint(&self) -> Cow<'static, str> {
38 format!(
39 "projects/{}/registry/repositories/{}/tags/{}",
40 self.project,
41 self.repository_id,
42 common::path_escaped(&self.tag_name),
43 )
44 .into()
45 }
46}
47
48#[cfg(test)]
49mod tests {
50 use crate::api::projects::registry::{RepositoryTagDetails, RepositoryTagDetailsBuilderError};
51 use crate::api::{self, Query};
52 use crate::test::client::{ExpectedUrl, SingleTestClient};
53
54 #[test]
55 fn parameters_are_necessary() {
56 let err = RepositoryTagDetails::builder().build().unwrap_err();
57 crate::test::assert_missing_field!(err, RepositoryTagDetailsBuilderError, "project");
58 }
59
60 #[test]
61 fn project_is_necessary() {
62 let err = RepositoryTagDetails::builder()
63 .repository_id(1)
64 .tag_name("latest")
65 .build()
66 .unwrap_err();
67 crate::test::assert_missing_field!(err, RepositoryTagDetailsBuilderError, "project");
68 }
69
70 #[test]
71 fn repository_is_necessary() {
72 let err = RepositoryTagDetails::builder()
73 .project(1)
74 .tag_name("latest")
75 .build()
76 .unwrap_err();
77 crate::test::assert_missing_field!(err, RepositoryTagDetailsBuilderError, "repository_id");
78 }
79
80 #[test]
81 fn tag_name_is_necessary() {
82 let err = RepositoryTagDetails::builder()
83 .project(1)
84 .repository_id(1)
85 .build()
86 .unwrap_err();
87 crate::test::assert_missing_field!(err, RepositoryTagDetailsBuilderError, "tag_name");
88 }
89
90 #[test]
91 fn all_parameters_are_sufficient() {
92 RepositoryTagDetails::builder()
93 .project(1)
94 .repository_id(1)
95 .tag_name("latest")
96 .build()
97 .unwrap();
98 }
99
100 #[test]
101 fn endpoint() {
102 let endpoint = ExpectedUrl::builder()
103 .endpoint("projects/simple%2Fproject/registry/repositories/1/tags/latest")
104 .build()
105 .unwrap();
106 let client = SingleTestClient::new_raw(endpoint, "");
107
108 let endpoint = RepositoryTagDetails::builder()
109 .project("simple/project")
110 .repository_id(1)
111 .tag_name("latest")
112 .build()
113 .unwrap();
114 api::ignore(endpoint).query(&client).unwrap();
115 }
116}