openapiv3_1/header.rs
1//! Implements [OpenAPI Header Object][header] types.
2//!
3//! [header]: https://spec.openapis.org/oas/latest.html#header-object
4
5use super::{Object, Schema, Type};
6
7/// Implements [OpenAPI Header Object][header] for response headers.
8///
9/// [header]: https://spec.openapis.org/oas/latest.html#header-object
10#[non_exhaustive]
11#[derive(serde_derive::Serialize, serde_derive::Deserialize, Clone, PartialEq, bon::Builder)]
12#[cfg_attr(feature = "debug", derive(Debug))]
13#[builder(on(_, into))]
14pub struct Header {
15 /// Schema of header type.
16 pub schema: Schema,
17
18 /// Additional description of the header value.
19 #[serde(skip_serializing_if = "Option::is_none", default)]
20 pub description: Option<String>,
21}
22
23impl Header {
24 /// Construct a new [`Header`] with custom schema. If you wish to construct a default
25 /// header with `String` type you can use [`Header::default`] function.
26 ///
27 /// # Examples
28 ///
29 /// Create new [`Header`] with integer type.
30 /// ```rust
31 /// # use openapiv3_1::header::Header;
32 /// # use openapiv3_1::{Object, Type};
33 /// let header = Header::new(Object::with_type(Type::Integer));
34 /// ```
35 ///
36 /// Create a new [`Header`] with default type `String`
37 /// ```rust
38 /// # use openapiv3_1::header::Header;
39 /// let header = Header::default();
40 /// ```
41 pub fn new<C: Into<Schema>>(component: C) -> Self {
42 Self {
43 schema: component.into(),
44 ..Default::default()
45 }
46 }
47}
48
49impl Default for Header {
50 fn default() -> Self {
51 Self {
52 description: Default::default(),
53 schema: Object::builder().schema_type(Type::String).into(),
54 }
55 }
56}
57
58impl<S: header_builder::IsComplete> From<HeaderBuilder<S>> for Header {
59 fn from(builder: HeaderBuilder<S>) -> Self {
60 builder.build()
61 }
62}