mupdf 0.7.0

Safe Rust wrapper to MuPDF
Documentation
pub mod annotation;
pub mod document;
pub mod filter;
pub mod graft_map;
pub mod intent;
pub mod links;
pub mod object;
pub mod page;

#[cfg(test)]
mod tests_annotation;

pub use annotation::{LineEndingStyle, PdfAnnotation, PdfAnnotationType};
pub use document::{Encryption, PdfDocument, PdfWriteOptions, Permission};
pub use filter::PdfFilterOptions;
pub use graft_map::PdfGraftMap;
pub use intent::Intent;
pub use links::{
    DestPageResolver, FileSpec, LinkAction, PdfAction, PdfDestination, PdfLink, PdfLinkAnnot,
};
pub use object::PdfObject;
pub use page::PdfPage;

#[must_use]
pub struct DocOperation<'a> {
    doc: &'a mut PdfDocument,
    success: bool,
}

impl<'a> DocOperation<'a> {
    fn begin(doc: &'a mut PdfDocument, name: &str) -> Result<Self, crate::Error> {
        doc.begin_operation(name)?;
        Ok(Self {
            doc,
            success: false,
        })
    }

    pub fn commit(mut self) -> Result<(), crate::Error> {
        self.doc.end_operation()?;
        self.success = true;
        Ok(())
    }
}

impl Drop for DocOperation<'_> {
    fn drop(&mut self) {
        if !self.success {
            let _ = self.doc.abandon_operation();
        }
    }
}