use serde::{Deserialize, Serialize};
use paperless_api_macros::{CreateDto, Item, UpdateDto};
use super::MatchAlgorithm;
use crate::id::TagId;
#[derive(Debug, Clone, Deserialize, Serialize, CreateDto, UpdateDto, Item)]
#[api_info(endpoint = "tags")]
pub struct Tag {
#[dto(skip)]
pub id: TagId,
#[dto(skip)]
pub slug: String,
pub name: String,
pub color: String,
#[dto(skip)]
pub text_color: String,
#[serde(rename = "match")]
pub match_pattern: String,
pub matching_algorithm: MatchAlgorithm,
pub is_insensitive: bool,
pub is_inbox_tag: bool,
#[dto(skip)]
#[serde(default)]
pub document_count: u32,
pub owner: Option<crate::id::UserId>,
pub parent: Option<TagId>,
#[dto(skip)]
pub children: Vec<Box<Tag>>,
#[dto(skip)]
#[serde(flatten)]
pub permissions: super::permission::ItemPermissions,
}