shared/domain/
additional_resource.rsuse crate::{
api::endpoints::PathPart,
domain::{asset::AssetId, audio::AudioId, image::ImageId, meta::ResourceTypeId, pdf::PdfId},
};
use macros::make_path_parts;
use serde::{Deserialize, Serialize};
wrap_uuid! {
pub struct AdditionalResourceId
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct AdditionalResource {
pub id: AdditionalResourceId,
pub display_name: String,
pub resource_type_id: ResourceTypeId,
#[serde(flatten)]
pub resource_content: ResourceContent,
}
make_path_parts!(CreateAssetResourcePath => "/v1/additional-resource/draft");
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct AdditionalResourceCreateRequest {
#[serde(flatten)]
pub asset_id: AssetId,
pub display_name: String,
pub resource_type_id: ResourceTypeId,
#[serde(flatten)]
pub resource_content: ResourceContent,
}
make_path_parts!(UpdateAssetResourcePath => "/v1/additional-resource/{}" => AdditionalResourceId);
#[derive(Serialize, Deserialize, Debug, Default)]
#[serde(rename_all = "camelCase")]
pub struct AdditionalResourceUpdateRequest {
#[serde(flatten)]
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub asset_id: Option<AssetId>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub display_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub resource_type_id: Option<ResourceTypeId>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
#[serde(flatten)]
pub resource_content: Option<ResourceContent>,
}
make_path_parts!(GetAssetResourceDraftPath => "/v1/additional-resource/{}/draft" => AdditionalResourceId);
make_path_parts!(GetAssetResourceLivePath => "/v1/additional-resource/{}/live" => AdditionalResourceId);
make_path_parts!(DeleteAssetResourcePath => "/v1/additional-resource/{}/draft" => AdditionalResourceId);
#[derive(Serialize, Deserialize, Debug, Default)]
#[serde(rename_all = "camelCase")]
pub struct AssetIdResource {
#[serde(flatten)]
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub asset_id: Option<AssetId>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub enum ResourceContent {
ImageId(ImageId),
AudioId(AudioId),
Link(url::Url),
PdfId(PdfId),
}