openapi_nexus_spec/oas30/spec/
contact.rs1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4use snafu::Snafu;
5
6use super::spec_extensions;
7
8#[derive(Debug, Snafu)]
10#[snafu(display("Email address is not valid"))]
11#[non_exhaustive]
12pub struct ErrorInvalidEmail;
13
14#[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 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}