Skip to main content

openapi_nexus_spec/oas31/spec/
contact.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4use snafu::Snafu;
5use url::Url;
6
7use super::spec_extensions;
8
9/// Error raised when contact info contains an email field which is not a valid email.
10#[derive(Debug, Snafu)]
11#[snafu(display("Email address is not valid"))]
12#[non_exhaustive]
13pub struct ErrorInvalidEmail;
14
15/// Contact information for the exposed API.
16#[derive(Debug, Clone, Default, PartialEq, Deserialize, Serialize)]
17pub struct Contact {
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub name: Option<String>,
20
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub url: Option<Url>,
23
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub email: Option<String>,
26
27    #[serde(flatten, with = "spec_extensions")]
28    pub extensions: BTreeMap<String, serde_json::Value>,
29}
30
31impl Contact {
32    /// Validates email address field.
33    pub fn validate_email(&self) -> Result<(), ErrorInvalidEmail> {
34        let Some(email) = &self.email else {
35            return Ok(());
36        };
37
38        if email.contains('@') {
39            Ok(())
40        } else {
41            Err(ErrorInvalidEmail)
42        }
43    }
44}