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}