1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
pub(crate) mod internal {
// We want to make the PdfPageObjectsPrivate trait private while providing a blanket
// implementation of PdfPageObjectsCommon for any type T where T: PdfPageObjectsPrivate.
// Rust complains, however, that by doing so we are leaking the private trait outside
// the crate.
// Instead of making the PdfPageObjectsPrivate trait private, we leave it public but place it
// inside this pub(crate) module in order to prevent it from being visible outside the crate.
use crate::bindgen::FPDF_DOCUMENT;
use crate::bindings::PdfiumLibraryBindings;
use crate::error::PdfiumError;
use crate::page_object::PdfPageObject;
use crate::page_objects_common::{PdfPageObjectIndex, PdfPageObjectsIterator};
/// Internal crate-specific functionality common to all [PdfPageObjects] collections.
pub trait PdfPageObjectsPrivate<'a> {
/// Returns the internal `FPDF_DOCUMENT` handle for this page objects collection.
fn document_handle(&self) -> FPDF_DOCUMENT;
/// Returns the [PdfiumLibraryBindings] used by this page objects collection.
fn bindings(&self) -> &'a dyn PdfiumLibraryBindings;
/// Internal implementation of [PdfPageObjectsCommon::len()].
fn len_impl(&self) -> PdfPageObjectIndex;
/// Internal implementation of [PdfPageObjectsCommon::get()].
fn get_impl(&self, index: PdfPageObjectIndex) -> Result<PdfPageObject<'a>, PdfiumError>;
/// Internal implementation of [PdfPageObjectsCommon::iter()].
fn iter_impl(&'a self) -> PdfPageObjectsIterator<'a>;
/// Internal implementation of [PdfPageObjectsCommon::add_object()].
fn add_object_impl(
&mut self,
object: PdfPageObject<'a>,
) -> Result<PdfPageObject<'a>, PdfiumError>;
/// Internal implementation of [PdfPageObjectsCommon::remove_object()].
fn remove_object_impl(
&mut self,
object: PdfPageObject<'a>,
) -> Result<PdfPageObject<'a>, PdfiumError>;
}
}