paperless_api/
share_link_bundle.rs1use chrono::{DateTime, Utc};
4use derive_more::Display;
5use paperless_api_macros::Item;
6use serde::{Deserialize, Serialize};
7
8use crate::{
9 PaperlessClient,
10 dto::{CreateDto, UpdateDto},
11 id::{DocumentId, ShareLinkBundleId},
12 share_link::ShareLinkFileVersion,
13};
14
15#[derive(Debug, Clone, Deserialize, Serialize, Item)]
17pub struct ShareLinkBundle {
18 pub id: crate::id::ShareLinkBundleId,
20
21 pub documents: Vec<DocumentId>,
23
24 pub file_version: ShareLinkFileVersion,
26
27 pub slug: String,
29
30 pub created: DateTime<Utc>,
32
33 pub built_at: DateTime<Utc>,
35
36 pub expiration: DateTime<Utc>,
38
39 pub size_bytes: u32,
41
42 pub document_count: u32,
44
45 pub status: ShareLinkBundleStatus,
47}
48
49#[derive(Debug, Clone, Serialize)]
50pub struct ShareLinkBundleDto {
51 pub expiration_days: u16,
53
54 pub file_version: ShareLinkFileVersion,
56
57 pub document_ids: Vec<DocumentId>,
59}
60
61impl CreateDto for ShareLinkBundle {
62 type Id = ShareLinkBundleId;
63 type BaseType = ShareLinkBundle;
64}
65
66impl UpdateDto for ShareLinkBundle {
67 type Id = ShareLinkBundleId;
68 type BaseType = ShareLinkBundle;
69}
70
71#[derive(Debug, Display, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
73#[serde(rename_all = "lowercase")]
74pub enum ShareLinkBundleStatus {
75 Pending,
76 Processing,
77 Ready,
78 Failed,
79}
80
81impl ShareLinkBundle {
82 #[must_use]
84 pub fn url(&self, client: &PaperlessClient) -> String {
85 format!("{}/share/{}", client.base_url, self.slug)
86 }
87}