use std::fmt;
use serde::{Deserialize, Serialize};
use super::tag::Tag;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum TemplateStatus {
#[serde(alias = "Uploading")]
Uploading,
#[serde(alias = "Uploaded")]
Uploaded,
#[serde(alias = "Processing")]
Processing,
#[serde(alias = "Ready")]
Ready,
#[serde(alias = "Failed")]
Failed,
#[serde(untagged)]
Unknown(String),
}
impl fmt::Display for TemplateStatus {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let s = match self {
TemplateStatus::Uploading => "uploading",
TemplateStatus::Uploaded => "uploaded",
TemplateStatus::Processing => "processing",
TemplateStatus::Ready => "ready",
TemplateStatus::Failed => "failed",
TemplateStatus::Unknown(s) => s.as_str(),
};
f.write_str(s)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Template {
#[serde(default)]
pub resource: Option<String>,
pub id: String,
pub name: String,
#[serde(default)]
pub document_name: Option<String>,
#[serde(default)]
pub message: Option<String>,
pub status: TemplateStatus,
#[serde(default)]
pub pages: Vec<TemplatePage>,
#[serde(default)]
pub roles: Vec<TemplateRole>,
#[serde(default)]
pub tags: Vec<Tag>,
#[serde(default)]
pub default_document_tags: Vec<TemplateTagRef>,
#[serde(default)]
pub created_at: Option<String>,
#[serde(default)]
pub updated_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub struct TemplatePage {
pub id: String,
pub number: u32,
pub height: u32,
pub width: u32,
#[serde(default)]
pub download_url: Option<String>,
#[serde(default)]
pub fields: Vec<TemplateField>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub struct TemplateField {
pub id: String,
pub field_id: String,
pub role_id: String,
pub label: String,
#[serde(default)]
pub display_settings: Option<serde_json::Value>,
#[serde(default)]
pub created_at: Option<String>,
#[serde(default)]
pub updated_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub struct TemplateRole {
pub id: String,
pub name: String,
pub assignment_type: String,
#[serde(default)]
pub created_at: Option<String>,
#[serde(default)]
pub updated_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub struct TemplateTagRef {
pub id: String,
pub name: String,
#[serde(default)]
pub color: Option<String>,
}