use serde::{Deserialize, Serialize};
use paperless_api_macros::{CreateDto, Item, UpdateDto};
use crate::id::{CustomFieldId, SelectableOptionId};
#[derive(Debug, Clone, Deserialize, Serialize, CreateDto, UpdateDto, Item)]
#[api_info(endpoint = "custom_fields")]
pub struct CustomField {
#[dto(skip)]
pub id: CustomFieldId,
pub name: String,
pub data_type: CustomFieldDataType,
pub extra_data: Option<CustomFieldExtraData>,
#[dto(skip)]
#[serde(default)]
pub document_count: u32,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct DocumentCustomField {
pub field: CustomFieldId,
pub value: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CustomFieldExtraData {
pub default_currency: Option<String>,
pub select_options: Option<Vec<SelectableOption>>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct SelectableOption {
pub id: SelectableOptionId,
pub label: String,
}
#[derive(Debug, Default, Clone, Deserialize, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum CustomFieldDataType {
#[default]
String,
Url,
Date,
Boolean,
Integer,
Float,
Monetary,
Documentlink,
Select,
Longtext,
}