use std::collections::HashSet;
use serde::{Deserialize, Serialize};
use time::{OffsetDateTime, serde::rfc3339};
#[cfg_attr(
feature = "borsh",
derive(borsh::BorshSerialize, borsh::BorshDeserialize)
)]
#[serde_with::serde_as]
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Record {
#[serde(default)]
#[serde_as(deserialize_as = "serde_with::DefaultOnError")]
#[serde(alias = "neosDBmanifest")]
pub asset_manifest: Vec<crate::model::DBAsset>,
pub asset_uri: crate::AssetUrl,
#[cfg_attr(
feature = "borsh",
borsh(
serialize_with = "crate::util::borsh::time::optional_ser",
deserialize_with = "crate::util::borsh::time::optional_de"
)
)]
#[serde(default)]
#[serde(with = "crate::util::opt_rfc3339")]
#[serde(skip_serializing_if = "Option::is_none")]
pub creation_time: Option<OffsetDateTime>,
#[serde(default)]
#[serde_as(deserialize_as = "serde_with::DefaultOnError")]
pub description: String,
#[cfg_attr(
feature = "borsh",
borsh(
serialize_with = "crate::util::borsh::time::optional_ser",
deserialize_with = "crate::util::borsh::time::optional_de"
)
)]
#[serde(default)]
#[serde(with = "crate::util::opt_rfc3339")]
#[serde(skip_serializing_if = "Option::is_none")]
pub first_publish_time: Option<OffsetDateTime>,
pub id: crate::id::Record,
pub is_deleted: bool,
pub is_for_patrons: bool,
pub is_listed: bool,
pub is_public: bool,
#[cfg_attr(
feature = "borsh",
borsh(
serialize_with = "crate::util::borsh::time::ser",
deserialize_with = "crate::util::borsh::time::de"
)
)]
#[serde(with = "rfc3339")]
pub last_modification_time: OffsetDateTime,
pub name: String,
pub owner_id: crate::id::Owner,
#[serde(default)]
#[serde_as(deserialize_as = "serde_with::DefaultOnError")]
pub owner_name: String,
#[serde_as(deserialize_as = "serde_with::DefaultOnError")]
#[serde(default)]
pub path: String,
pub random_order: u32,
pub rating: f32,
pub record_type: String,
#[serde(default)]
#[serde_as(deserialize_as = "serde_with::DefaultOnError")]
pub submissions: Vec<crate::model::Submission>,
#[serde(default)]
#[serde_as(deserialize_as = "serde_with::DefaultOnError")]
pub tags: HashSet<String>,
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub thumbnail_uri: Option<crate::AssetUrl>,
pub version: RecordVersion,
pub visits: u32,
}
#[cfg_attr(
feature = "borsh",
derive(borsh::BorshSerialize, borsh::BorshDeserialize)
)]
#[derive(Debug, PartialEq, Eq, Hash, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RecordVersion {
pub global_version: u32,
pub last_modifying_machine_id: String,
pub last_modifying_user_id: crate::id::User,
pub local_version: u32,
}