use crate::models;
use serde::{Deserialize, Serialize};
use serde_with::serde_as;
#[serde_as]
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct Document {
#[serde(rename = "id")]
pub id: String,
#[serde(rename = "summary", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub summary: Option<Option<String>>,
#[serde(rename = "passengerRef", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub passenger_ref: Option<Option<String>>,
#[serde(rename = "downloadLink", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub download_link: Option<Option<String>>,
#[serde(rename = "downloadExpiry", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub download_expiry: Option<Option<String>>,
#[serde_as(as = "super::DoubleOption<serde_with::base64::Base64>")]
#[serde(rename = "content", default, skip_serializing_if = "Option::is_none")]
pub content: Option<Option<Vec<u8>>>,
#[serde(rename = "format", skip_serializing_if = "Option::is_none")]
pub format: Option<models::DocumentFormat>,
#[serde(rename = "type")]
pub r#type: models::DocumentType,
#[serde(rename = "scope")]
pub scope: models::DocumentScope,
}
impl Document {
pub fn new(id: String, r#type: models::DocumentType, scope: models::DocumentScope) -> Document {
Document {
id,
summary: None,
passenger_ref: None,
download_link: None,
download_expiry: None,
content: None,
format: None,
r#type,
scope,
}
}
}