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