use crate::{error::PdfResult, pdf_enum};
#[derive(Debug)]
pub(crate) enum StateModel {
Marked(MarkedState),
Review(ReviewState),
}
impl StateModel {
pub fn default(state_model: &str) -> PdfResult<Self> {
Ok(match state_model {
"Marked" => Self::Marked(MarkedState::default()),
"Review" => Self::Review(ReviewState::default()),
found => {
return Err(crate::error::ParseError::UnrecognizedVariant {
ty: "StateModel",
found: found.to_owned(),
})
}
})
}
pub fn with_state(state_model: &str, state: &str) -> PdfResult<Self> {
let state_model = Self::default(state_model)?;
Ok(match state_model {
Self::Marked(..) => Self::Marked(MarkedState::from_str(state)?),
Self::Review(..) => Self::Review(ReviewState::from_str(state)?),
})
}
}
pdf_enum!(
#[derive(Debug)]
pub(crate) enum MarkedState {
Marked = "Marked",
Unmarked = "Unmarked",
}
);
impl Default for MarkedState {
fn default() -> Self {
Self::Unmarked
}
}
pdf_enum!(
#[derive(Debug)]
pub(crate) enum ReviewState {
Accepted = "Accepted",
Rejected = "Rejected",
Cancelled = "Cancelled",
Completed = "Completed",
None = "None",
}
);
impl Default for ReviewState {
fn default() -> Self {
Self::None
}
}