openstack_sdk/api/image/v2/metadef/namespace/object/
get.rs

1// Licensed under the Apache License, Version 2.0 (the "License");
2// you may not use this file except in compliance with the License.
3// You may obtain a copy of the License at
4//
5//     http://www.apache.org/licenses/LICENSE-2.0
6//
7// Unless required by applicable law or agreed to in writing, software
8// distributed under the License is distributed on an "AS IS" BASIS,
9// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10// See the License for the specific language governing permissions and
11// limitations under the License.
12//
13// SPDX-License-Identifier: Apache-2.0
14//
15// WARNING: This file is automatically generated from OpenAPI schema using
16// `openstack-codegenerator`.
17
18use derive_builder::Builder;
19use http::{HeaderMap, HeaderName, HeaderValue};
20
21use crate::api::rest_endpoint_prelude::*;
22
23use std::borrow::Cow;
24
25#[derive(Builder, Debug, Clone)]
26#[builder(setter(strip_option))]
27pub struct Request<'a> {
28    /// namespace_name parameter for
29    /// /v2/metadefs/namespaces/{namespace_name}/objects/{object_name} API
30    #[builder(default, setter(into))]
31    namespace_name: Cow<'a, str>,
32
33    /// object_name parameter for
34    /// /v2/metadefs/namespaces/{namespace_name}/objects/{object_name} API
35    #[builder(default, setter(into))]
36    object_name: Cow<'a, str>,
37
38    #[builder(setter(name = "_headers"), default, private)]
39    _headers: Option<HeaderMap>,
40}
41impl<'a> Request<'a> {
42    /// Create a builder for the endpoint.
43    pub fn builder() -> RequestBuilder<'a> {
44        RequestBuilder::default()
45    }
46}
47
48impl<'a> RequestBuilder<'a> {
49    /// Add a single header to the Object.
50    pub fn header<K, V>(&mut self, header_name: K, header_value: V) -> &mut Self
51    where
52        K: Into<HeaderName>,
53        V: Into<HeaderValue>,
54    {
55        self._headers
56            .get_or_insert(None)
57            .get_or_insert_with(HeaderMap::new)
58            .insert(header_name.into(), header_value.into());
59        self
60    }
61
62    /// Add multiple headers.
63    pub fn headers<I, T>(&mut self, iter: I) -> &mut Self
64    where
65        I: Iterator<Item = T>,
66        T: Into<(Option<HeaderName>, HeaderValue)>,
67    {
68        self._headers
69            .get_or_insert(None)
70            .get_or_insert_with(HeaderMap::new)
71            .extend(iter.map(Into::into));
72        self
73    }
74}
75
76impl RestEndpoint for Request<'_> {
77    fn method(&self) -> http::Method {
78        http::Method::GET
79    }
80
81    fn endpoint(&self) -> Cow<'static, str> {
82        format!(
83            "metadefs/namespaces/{namespace_name}/objects/{object_name}",
84            namespace_name = self.namespace_name.as_ref(),
85            object_name = self.object_name.as_ref(),
86        )
87        .into()
88    }
89
90    fn parameters(&self) -> QueryParams<'_> {
91        QueryParams::default()
92    }
93
94    fn service_type(&self) -> ServiceType {
95        ServiceType::Image
96    }
97
98    fn response_key(&self) -> Option<Cow<'static, str>> {
99        None
100    }
101
102    /// Returns headers to be set into the request
103    fn request_headers(&self) -> Option<&HeaderMap> {
104        self._headers.as_ref()
105    }
106
107    /// Returns required API version
108    fn api_version(&self) -> Option<ApiVersion> {
109        Some(ApiVersion::new(2, 0))
110    }
111}
112
113#[cfg(test)]
114mod tests {
115    use super::*;
116    #[cfg(feature = "sync")]
117    use crate::api::Query;
118    use crate::test::client::FakeOpenStackClient;
119    use crate::types::ServiceType;
120    use http::{HeaderName, HeaderValue};
121    use httpmock::MockServer;
122    use serde_json::json;
123
124    #[test]
125    fn test_service_type() {
126        assert_eq!(
127            Request::builder().build().unwrap().service_type(),
128            ServiceType::Image
129        );
130    }
131
132    #[test]
133    fn test_response_key() {
134        assert!(Request::builder().build().unwrap().response_key().is_none())
135    }
136
137    #[cfg(feature = "sync")]
138    #[test]
139    fn endpoint() {
140        let server = MockServer::start();
141        let client = FakeOpenStackClient::new(server.base_url());
142        let mock = server.mock(|when, then| {
143            when.method(httpmock::Method::GET).path(format!(
144                "/metadefs/namespaces/{namespace_name}/objects/{object_name}",
145                namespace_name = "namespace_name",
146                object_name = "object_name",
147            ));
148
149            then.status(200)
150                .header("content-type", "application/json")
151                .json_body(json!({ "dummy": {} }));
152        });
153
154        let endpoint = Request::builder()
155            .namespace_name("namespace_name")
156            .object_name("object_name")
157            .build()
158            .unwrap();
159        let _: serde_json::Value = endpoint.query(&client).unwrap();
160        mock.assert();
161    }
162
163    #[cfg(feature = "sync")]
164    #[test]
165    fn endpoint_headers() {
166        let server = MockServer::start();
167        let client = FakeOpenStackClient::new(server.base_url());
168        let mock = server.mock(|when, then| {
169            when.method(httpmock::Method::GET)
170                .path(format!(
171                    "/metadefs/namespaces/{namespace_name}/objects/{object_name}",
172                    namespace_name = "namespace_name",
173                    object_name = "object_name",
174                ))
175                .header("foo", "bar")
176                .header("not_foo", "not_bar");
177            then.status(200)
178                .header("content-type", "application/json")
179                .json_body(json!({ "dummy": {} }));
180        });
181
182        let endpoint = Request::builder()
183            .namespace_name("namespace_name")
184            .object_name("object_name")
185            .headers(
186                [(
187                    Some(HeaderName::from_static("foo")),
188                    HeaderValue::from_static("bar"),
189                )]
190                .into_iter(),
191            )
192            .header(
193                HeaderName::from_static("not_foo"),
194                HeaderValue::from_static("not_bar"),
195            )
196            .build()
197            .unwrap();
198        let _: serde_json::Value = endpoint.query(&client).unwrap();
199        mock.assert();
200    }
201}