#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum Capability {
PdfParse,
PdfWrite,
PageOps,
TextExtract,
TextExtractWithLayout,
ImageExtract,
TableExtract,
RenderRaster,
RenderThumbnail,
AcroFormRead,
AcroFormFill,
AcroFormFlatten,
XfaParse,
XfaFill,
XfaFlatten,
EncryptionRead,
EncryptionWrite,
DigitalSignatureSign,
DigitalSignatureVerify,
PadesLongTerm,
PadesLongTermArchive,
PdfaValidate,
PdfaConvertA1b,
PdfaConvertA2b,
PdfaConvertA3b,
PdfuaValidate,
PdfuaConvert,
EInvoiceZugferd,
EInvoiceFacturX,
EInvoiceXRechnung,
Redaction,
OcrTesseract,
OcrPaddle,
Html2Pdf,
DocxExport,
XlsxExport,
PptxExport,
PdfDiff,
WasmRuntime,
AirGapped,
OemRedistribution,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub struct CapabilitySet {
bits: u64,
}
impl CapabilitySet {
pub const fn empty() -> Self {
Self { bits: 0 }
}
pub fn contains(&self, cap: Capability) -> bool {
let bit = 1u64 << (cap as u32);
self.bits & bit != 0
}
pub fn with(mut self, cap: Capability) -> Self {
self.bits |= 1u64 << (cap as u32);
self
}
}
impl std::fmt::Display for CapabilitySet {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "CapabilitySet(0b{:b})", self.bits)
}
}