Skip to main content

provenant/output_schema/
party.rs

1// SPDX-FileCopyrightText: Provenant contributors
2// SPDX-License-Identifier: Apache-2.0
3
4use 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}