shared/domain/
additional_resource.rs1use crate::{
4 api::endpoints::PathPart,
5 domain::{asset::AssetId, audio::AudioId, image::ImageId, meta::ResourceTypeId, pdf::PdfId},
6};
7use macros::make_path_parts;
8use serde::{Deserialize, Serialize};
9
10wrap_uuid! {
11 pub struct AdditionalResourceId
13}
14
15#[derive(Serialize, Deserialize, Debug, Clone)]
16#[serde(rename_all = "camelCase")]
17pub struct AdditionalResource {
19 pub id: AdditionalResourceId,
21
22 pub display_name: String,
24
25 pub resource_type_id: ResourceTypeId,
27
28 #[serde(flatten)]
30 pub resource_content: ResourceContent,
31}
32
33make_path_parts!(CreateAssetResourcePath => "/v1/additional-resource/draft");
34
35#[derive(Serialize, Deserialize, Debug)]
39#[serde(rename_all = "camelCase")]
40pub struct AdditionalResourceCreateRequest {
41 #[serde(flatten)]
43 pub asset_id: AssetId,
44
45 pub display_name: String,
47
48 pub resource_type_id: ResourceTypeId,
50
51 #[serde(flatten)]
53 pub resource_content: ResourceContent,
54}
55
56make_path_parts!(UpdateAssetResourcePath => "/v1/additional-resource/{}" => AdditionalResourceId);
57
58#[derive(Serialize, Deserialize, Debug, Default)]
62#[serde(rename_all = "camelCase")]
63pub struct AdditionalResourceUpdateRequest {
64 #[serde(flatten)]
66 #[serde(default)]
67 #[serde(skip_serializing_if = "Option::is_none")]
68 pub asset_id: Option<AssetId>,
69
70 #[serde(skip_serializing_if = "Option::is_none")]
72 #[serde(default)]
73 pub display_name: Option<String>,
74
75 #[serde(skip_serializing_if = "Option::is_none")]
77 #[serde(default)]
78 pub resource_type_id: Option<ResourceTypeId>,
79
80 #[serde(skip_serializing_if = "Option::is_none")]
82 #[serde(default)]
83 #[serde(flatten)]
84 pub resource_content: Option<ResourceContent>,
85}
86
87make_path_parts!(GetAssetResourceDraftPath => "/v1/additional-resource/{}/draft" => AdditionalResourceId);
88
89make_path_parts!(GetAssetResourceLivePath => "/v1/additional-resource/{}/live" => AdditionalResourceId);
90
91make_path_parts!(DeleteAssetResourcePath => "/v1/additional-resource/{}/draft" => AdditionalResourceId);
92
93#[derive(Serialize, Deserialize, Debug, Default)]
97#[serde(rename_all = "camelCase")]
98pub struct AssetIdResource {
99 #[serde(flatten)]
101 #[serde(default)]
102 #[serde(skip_serializing_if = "Option::is_none")]
103 pub asset_id: Option<AssetId>,
104}
105
106#[derive(Deserialize, Serialize, Debug, Clone)]
108#[serde(rename_all = "camelCase")]
109pub enum ResourceContent {
110 ImageId(ImageId),
112 AudioId(AudioId),
114 Link(url::Url),
116 PdfId(PdfId),
118}