provenant/output_schema/
party.rs1use std::str::FromStr;
5
6use serde::{Deserialize, Serialize};
7
8#[derive(Serialize, Deserialize, Debug, Clone)]
9pub struct OutputParty {
10 pub r#type: Option<String>,
11 pub role: Option<String>,
12 pub name: Option<String>,
13 pub email: Option<String>,
14 pub url: Option<String>,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub organization: Option<String>,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub organization_url: Option<String>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub timezone: Option<String>,
21}
22
23impl From<&crate::models::Party> for OutputParty {
24 fn from(value: &crate::models::Party) -> Self {
25 Self {
26 r#type: value.r#type.map(|t| t.to_string()),
27 role: value.role.clone(),
28 name: value.name.clone(),
29 email: value.email.clone(),
30 url: value.url.clone(),
31 organization: value.organization.clone(),
32 organization_url: value.organization_url.clone(),
33 timezone: value.timezone.clone(),
34 }
35 }
36}
37
38impl TryFrom<&OutputParty> for crate::models::Party {
39 type Error = String;
40 fn try_from(value: &OutputParty) -> Result<Self, Self::Error> {
41 Ok(Self {
42 r#type: value
43 .r#type
44 .as_deref()
45 .map(crate::models::PartyType::from_str)
46 .transpose()?,
47 role: value.role.clone(),
48 name: value.name.clone(),
49 email: value.email.clone(),
50 url: value.url.clone(),
51 organization: value.organization.clone(),
52 organization_url: value.organization_url.clone(),
53 timezone: value.timezone.clone(),
54 })
55 }
56}