openapiv3_1/
external_docs.rs

1//! Implements [OpenAPI External Docs Object][external_docs] types.
2//!
3//! [external_docs]: https://spec.openapis.org/oas/latest.html#xml-object
4use serde_derive::{Deserialize, Serialize};
5
6use super::extensions::Extensions;
7
8/// Reference of external resource allowing extended documentation.
9#[non_exhaustive]
10#[derive(Serialize, Deserialize, Default, Clone, PartialEq, Eq, bon::Builder)]
11#[cfg_attr(feature = "debug", derive(Debug))]
12#[serde(rename_all = "camelCase")]
13#[builder(on(_, into))]
14pub struct ExternalDocs {
15    /// Target url for external documentation location.
16    pub url: String,
17    /// Additional description supporting markdown syntax of the external documentation.
18    #[serde(default)]
19    pub description: Option<String>,
20
21    /// Optional extensions "x-something".
22    #[serde(skip_serializing_if = "Option::is_none", flatten, default)]
23    pub extensions: Option<Extensions>,
24}
25
26impl ExternalDocs {
27    /// Construct a new [`ExternalDocs`].
28    ///
29    /// Function takes target url argument for the external documentation location.
30    ///
31    /// # Examples
32    ///
33    /// ```rust
34    /// # use openapiv3_1::external_docs::ExternalDocs;
35    /// let external_docs = ExternalDocs::new("https://pet-api.external.docs");
36    /// ```
37    pub fn new<S: AsRef<str>>(url: S) -> Self {
38        Self {
39            url: url.as_ref().to_string(),
40            ..Default::default()
41        }
42    }
43}
44
45impl<S: external_docs_builder::IsComplete> From<ExternalDocsBuilder<S>> for ExternalDocs {
46    fn from(builder: ExternalDocsBuilder<S>) -> Self {
47        builder.build()
48    }
49}