Skip to main content

provenant/output_schema/
party.rs

1// SPDX-FileCopyrightText: Provenant contributors
2// SPDX-License-Identifier: Apache-2.0
3
4use serde::{Deserialize, Serialize};
5
6#[derive(Serialize, Deserialize, Debug, Clone)]
7pub struct OutputParty {
8    pub r#type: Option<String>,
9    pub role: Option<String>,
10    pub name: Option<String>,
11    pub email: Option<String>,
12    pub url: Option<String>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub organization: Option<String>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub organization_url: Option<String>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub timezone: Option<String>,
19}
20
21impl From<&crate::models::Party> for OutputParty {
22    fn from(value: &crate::models::Party) -> Self {
23        Self {
24            r#type: value.r#type.clone(),
25            role: value.role.clone(),
26            name: value.name.clone(),
27            email: value.email.clone(),
28            url: value.url.clone(),
29            organization: value.organization.clone(),
30            organization_url: value.organization_url.clone(),
31            timezone: value.timezone.clone(),
32        }
33    }
34}
35
36impl TryFrom<&OutputParty> for crate::models::Party {
37    type Error = String;
38    fn try_from(value: &OutputParty) -> Result<Self, Self::Error> {
39        Ok(Self {
40            r#type: value.r#type.clone(),
41            role: value.role.clone(),
42            name: value.name.clone(),
43            email: value.email.clone(),
44            url: value.url.clone(),
45            organization: value.organization.clone(),
46            organization_url: value.organization_url.clone(),
47            timezone: value.timezone.clone(),
48        })
49    }
50}