Skip to main content

openapi_nexus_spec/oas30/spec/
contact.rs

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