gitlab/api/projects/releases/links/
link.rs1use crate::api::common::{self, NameOrId};
8use crate::api::endpoint_prelude::*;
9use derive_builder::Builder;
10
11#[derive(Debug, Builder, Clone)]
13pub struct GetReleaseLink<'a> {
14 #[builder(setter(into))]
16 project: NameOrId<'a>,
17
18 #[builder(setter(into))]
20 tag_name: Cow<'a, str>,
21
22 #[builder(setter(into))]
24 link_id: NameOrId<'a>,
25}
26
27impl<'a> GetReleaseLink<'a> {
28 pub fn builder() -> GetReleaseLinkBuilder<'a> {
30 GetReleaseLinkBuilder::default()
31 }
32}
33
34impl Endpoint for GetReleaseLink<'_> {
35 fn method(&self) -> Method {
36 Method::GET
37 }
38
39 fn endpoint(&self) -> Cow<'static, str> {
40 format!(
41 "projects/{}/releases/{}/assets/links/{}",
42 self.project,
43 common::path_escaped(self.tag_name.as_ref()),
44 self.link_id,
45 )
46 .into()
47 }
48}
49
50#[cfg(test)]
51mod tests {
52 use http::Method;
53
54 use crate::{
55 api::{self, projects::releases::links::GetReleaseLinkBuilderError, Query},
56 test::client::{ExpectedUrl, SingleTestClient},
57 };
58
59 use super::GetReleaseLink;
60
61 #[test]
62 fn project_is_needed() {
63 let err = GetReleaseLink::builder()
64 .tag_name("1.2.3")
65 .link_id(123)
66 .build()
67 .unwrap_err();
68
69 crate::test::assert_missing_field!(err, GetReleaseLinkBuilderError, "project");
70 }
71
72 #[test]
73 fn tag_name_is_needed() {
74 let err = GetReleaseLink::builder()
75 .project(1)
76 .link_id(123)
77 .build()
78 .unwrap_err();
79
80 crate::test::assert_missing_field!(err, GetReleaseLinkBuilderError, "tag_name");
81 }
82
83 #[test]
84 fn link_id_is_needed() {
85 let err = GetReleaseLink::builder()
86 .tag_name("1.2.3")
87 .project(1)
88 .build()
89 .unwrap_err();
90
91 crate::test::assert_missing_field!(err, GetReleaseLinkBuilderError, "link_id");
92 }
93
94 #[test]
95 fn required_parameter_are_sufficient() {
96 GetReleaseLink::builder()
97 .project(1)
98 .tag_name("1.2.3")
99 .link_id(123)
100 .build()
101 .unwrap();
102 }
103
104 #[test]
105 fn endpoint() {
106 let endpoint = ExpectedUrl::builder()
107 .method(Method::GET)
108 .endpoint("projects/1337/releases/1.2.3%2001/assets/links/123")
109 .build()
110 .unwrap();
111 let client = SingleTestClient::new_raw(endpoint, "");
112
113 let endpoint = GetReleaseLink::builder()
114 .project(1337)
115 .tag_name("1.2.3 01")
116 .link_id(123)
117 .build()
118 .unwrap();
119 api::ignore(endpoint).query(&client).unwrap();
120 }
121}