use serde::{Deserialize, Serialize};
use crate::types::{StBox, StId, StLoc};
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Signatures {
#[serde(rename = "MaxSignId")]
pub max_sign_id: Option<String>,
#[serde(rename = "Signature", default)]
pub signatures: Vec<SignatureRef>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct SignatureRef {
#[serde(rename = "@ID")]
pub id: StId,
#[serde(rename = "@Type")]
pub sig_type: Option<String>,
#[serde(rename = "@BaseLoc")]
pub base_loc: StLoc,
}
impl SignatureRef {
pub fn type_or_default(&self) -> &str {
self.sig_type.as_deref().unwrap_or("Seal")
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Signature {
#[serde(rename = "SignedInfo")]
pub signed_info: SignedInfo,
#[serde(rename = "SignedValue")]
pub signed_value: StLoc,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct SignedInfo {
#[serde(rename = "Provider")]
pub provider: Provider,
#[serde(rename = "SignatureMethod")]
pub signature_method: Option<String>,
#[serde(rename = "SignatureDateTime")]
pub signature_date_time: Option<String>,
#[serde(rename = "References")]
pub references: References,
#[serde(rename = "StampAnnot", default)]
pub stamp_annots: Vec<StampAnnot>,
#[serde(rename = "Seal")]
pub seal: Option<Seal>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Provider {
#[serde(rename = "@ProviderName")]
pub provider_name: String,
#[serde(rename = "@Version")]
pub version: Option<String>,
#[serde(rename = "@Company")]
pub company: Option<String>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct References {
#[serde(rename = "@CheckMethod")]
pub check_method: Option<String>,
#[serde(rename = "Reference", default)]
pub references: Vec<Reference>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Reference {
#[serde(rename = "@FileRef")]
pub file_ref: StLoc,
#[serde(rename = "CheckValue", default)]
pub check_value: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct StampAnnot {
#[serde(rename = "@ID")]
pub id: Option<StId>,
#[serde(rename = "@PageRef")]
pub page_ref: Option<String>,
#[serde(rename = "@Boundary")]
pub boundary: Option<StBox>,
#[serde(rename = "@Clip")]
pub clip: Option<StBox>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Seal {
#[serde(rename = "BaseLoc")]
pub base_loc: Option<StLoc>,
}