Skip to main content

paperless_api/metadata/
custom_field.rs

1//! Types related to custom fields.
2
3use serde::{Deserialize, Serialize};
4
5use paperless_api_macros::{CreateDto, Item, UpdateDto};
6
7use crate::id::{CustomFieldId, SelectableOptionId};
8
9/// Custom field definition.
10#[derive(Debug, Default, Clone, Deserialize, Serialize, CreateDto, UpdateDto, Item)]
11#[api_info(endpoint = "custom_fields")]
12pub struct CustomField {
13    /// Unique identifier of the custom field.
14    #[dto(skip)]
15    pub id: CustomFieldId,
16
17    /// Name of the custom field.
18    pub name: String,
19
20    /// Data type of the custom field.
21    pub data_type: CustomFieldDataType,
22
23    /// Extra data for the custom field, such as currency or select options.
24    pub extra_data: Option<CustomFieldExtraData>,
25
26    /// Number of documents that have this custom field set.
27    #[dto(skip)]
28    #[serde(default)]
29    pub document_count: u32,
30}
31
32/// Custom field value of an existing document
33#[derive(Debug, Clone, Deserialize, Serialize)]
34pub struct DocumentCustomField {
35    /// Unique identifier of the custom field.
36    pub field: CustomFieldId,
37
38    /// Value of the custom field.
39    pub value: String,
40}
41
42#[derive(Debug, Clone, Deserialize, Serialize)]
43pub struct CustomFieldExtraData {
44    pub default_currency: Option<String>,
45    pub select_options: Option<Vec<SelectableOption>>,
46}
47
48#[derive(Debug, Clone, Deserialize, Serialize)]
49pub struct SelectableOption {
50    pub id: SelectableOptionId,
51    pub label: String,
52}
53
54#[derive(Debug, Default, Clone, Deserialize, Serialize)]
55#[serde(rename_all = "lowercase")]
56pub enum CustomFieldDataType {
57    #[default]
58    String,
59    Url,
60    Date,
61    Boolean,
62    Integer,
63    Float,
64    Monetary,
65    Documentlink,
66    Select,
67    Longtext,
68}