use std::sync::Arc;
use chrono::{DateTime, Utc};
use derive_more::Display;
use serde::{Deserialize, Serialize};
use paperless_api_macros::CreateDto;
#[derive(Debug, Display, Default, Clone, Copy, Deserialize, Serialize, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum ShareLinkFileVersion {
#[default]
Archive,
Original,
}
#[derive(Debug, Clone, Deserialize, CreateDto)]
#[api_info(private, endpoint = "share_links")]
pub struct ShareLink {
#[dto(skip)]
pub id: crate::id::ShareLinkId,
pub document: crate::id::DocumentId,
#[dto(skip)]
pub created: DateTime<Utc>,
pub expiration: DateTime<Utc>,
pub file_version: ShareLinkFileVersion,
#[dto(skip)]
pub slug: String,
#[serde(skip)]
#[dto(skip)]
pub(crate) base_url: Arc<str>,
}
impl ShareLink {
#[must_use]
pub fn url(&self) -> String {
format!("{}/share/{}", self.base_url, self.slug)
}
}