Enum ProcessorCapability

Source
pub enum ProcessorCapability {
    Perfect,
    Good,
    Fallback,
    Incompatible,
}
Expand description

Assessment of a processor’s capability to handle specific data

This enum provides a nuanced way for processors to indicate how well they can handle particular data, enabling the registry to make optimal selections while maintaining fallback options.

§ExifTool Reference

ExifTool uses conditional expressions to determine processor applicability:

{
    Condition => '$$self{Model} =~ /EOS R5/',  # Perfect match
    SubDirectory => { ProcessProc => \&ProcessCanonSerialDataMkII }
},
{
    Condition => '$$self{Make} eq "Canon"',    # Good match
    SubDirectory => { ProcessProc => \&ProcessCanonSerialData }
}

This enum captures these preference levels explicitly.

Variants§

§

Perfect

Exact match for this data - highest priority

Use this when the processor is specifically designed for the exact combination of manufacturer, model, format version, etc.

Example: Canon EOS R5 serial data processor when processing EOS R5 data

§

Good

Compatible and good choice - second priority

Use this when the processor is designed for this manufacturer/format but may not be the most specific option available.

Example: Generic Canon processor when processing Canon data

§

Fallback

Can handle but not optimal - third priority

Use this when the processor can handle the data but it’s not its primary purpose. Often used by generic processors as fallbacks.

Example: Generic EXIF processor when processing manufacturer data

§

Incompatible

Cannot process this data - will be filtered out

Use this when the processor cannot handle the data due to format incompatibility, missing required context, etc.

Implementations§

Source§

impl ProcessorCapability

Source

pub fn is_compatible(&self) -> bool

Check if this capability indicates the processor can handle the data

Source

pub fn priority_score(&self) -> u8

Get priority score for sorting (higher is better)

Source

pub fn description(&self) -> &'static str

Get human-readable description

Source

pub fn combine(capabilities: &[ProcessorCapability]) -> ProcessorCapability

Combine multiple capabilities to get overall assessment

This is useful when a processor evaluates multiple criteria and needs to provide an overall capability assessment.

Source

pub fn from_boolean(is_compatible: bool) -> ProcessorCapability

Create capability based on boolean conditions

Helper for simple processors that just need to check if they’re compatible.

Source

pub fn from_specificity( manufacturer_matches: bool, model_matches: bool, is_primary_purpose: bool, ) -> ProcessorCapability

Create capability with manufacturer and model specificity

Helper for manufacturer-specific processors that want to indicate different capability levels based on specificity.

Trait Implementations§

Source§

impl Clone for ProcessorCapability

Source§

fn clone(&self) -> ProcessorCapability

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ProcessorCapability

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Ord for ProcessorCapability

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for ProcessorCapability

Source§

fn eq(&self, other: &ProcessorCapability) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for ProcessorCapability

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Eq for ProcessorCapability

Source§

impl StructuralPartialEq for ProcessorCapability

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more