pub struct CandidateScanner { /* private fields */ }Expand description
What:
The loaded scanner.
The field is private:
the only way to obtain a value is load.
Why:
Holding the loaded rules in one value is what makes “load once,
scan many”
a property of the type:
scanning borrows it and cannot reload.
In TS you’d write (pseudocode):
class CandidateScanner { readonly #scanner: Scanner }Implementations§
Source§impl CandidateScanner
What:
impl CandidateScanner { ... } attaches the adapter’s operations,
like class methods.
Why:
Loading is the only fallible,
expensive step;
scanning afterwards is cheap and repeatable.
impl CandidateScanner
What:
impl CandidateScanner { ... } attaches the adapter’s operations,
like class methods.
Why:
Loading is the only fallible,
expensive step;
scanning afterwards is cheap and repeatable.
In TS you’d write (pseudocode):
class CandidateScanner { static load(rules, builtinRules) {} scan(candidate, bytes) {} }Sourcepub fn load(
rules: &RulesSource,
builtin_rules: bool,
) -> Result<CandidateScanner, ScannerError>
pub fn load( rules: &RulesSource, builtin_rules: bool, ) -> Result<CandidateScanner, ScannerError>
What:
Load the runtime rules file and,
when asked,
the built-in baseline.
&RulesSource borrows the selection;
Result<T, E> is “a value or a failure”.
Why:
The scanner’s loader validates rules,
reuses its compiled-rule cache and
catches its own panics.
Any failure leaves no scanner at all,
so nothing
can be scanned with half a rule set.
In TS you’d write (pseudocode):
static load(rules: RulesSource, builtinRules: boolean): CandidateScannerSourcepub fn cache_warnings(&self) -> &[CacheWarning]
pub fn cache_warnings(&self) -> &[CacheWarning]
What:
The cache diagnostics of this load,
as the scanner’s own fixed-token values.
&[CacheWarning] borrows the list read-only.
Why:
A stale or missing rule cache is recovered by recompiling,
which is slow;
the caller reports that once per invocation.
In TS you’d write (pseudocode):
get cacheWarnings(): readonly CacheWarning[]Sourcepub fn scan(
&self,
candidate: &Candidate,
bytes: &[u8],
) -> Result<CandidateScan, ScannerError>
pub fn scan( &self, candidate: &Candidate, bytes: &[u8], ) -> Result<CandidateScan, ScannerError>
What:
Scan one candidate’s pathname and exact bytes.
&[u8] borrows the bytes;
the result is the scanner’s own CandidateScan.
Why:
The scan’s identity is the candidate’s position in its version,
so a
finding is attributed without reading the pathname,
which may be masked.
Fail-closed findings (an engine error,
a line break in a pathname) are
returned like any other finding and are never filtered here.
In TS you’d write (pseudocode):
scan(candidate: Candidate, bytes: Uint8Array): CandidateScanAuto Trait Implementations§
impl Freeze for CandidateScanner
impl RefUnwindSafe for CandidateScanner
impl Send for CandidateScanner
impl Sync for CandidateScanner
impl Unpin for CandidateScanner
impl UnsafeUnpin for CandidateScanner
impl UnwindSafe for CandidateScanner
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more