pub trait Analyzer: Send + Sync {
// Required methods
fn evaluate(&self, data: &DifferentialSet) -> SampleDecision;
fn oracle_class(&self) -> OracleClass;
// Provided methods
fn analyze(
&self,
data: &DifferentialSet,
) -> Result<OracleResult, AnalyzerError> { ... }
fn required_samples(&self) -> usize { ... }
}Expand description
Analyzes paired baseline/probe exchanges and produces an oracle verdict.
Implementors must be Send + Sync so they can be held in shared state across async tasks.
All methods take &self — analyzers are stateless with respect to individual probe runs.
Required Methods§
Sourcefn evaluate(&self, data: &DifferentialSet) -> SampleDecision
fn evaluate(&self, data: &DifferentialSet) -> SampleDecision
Incrementally evaluate a growing DifferentialSet.
Called after each new exchange pair is added. Returns NeedMore until enough samples
are collected to determine stability, then Complete with the final result.
Sourcefn oracle_class(&self) -> OracleClass
fn oracle_class(&self) -> OracleClass
Oracle class this analyzer handles — used for result attribution.
Provided Methods§
Sourcefn analyze(&self, data: &DifferentialSet) -> Result<OracleResult, AnalyzerError>
fn analyze(&self, data: &DifferentialSet) -> Result<OracleResult, AnalyzerError>
Analyze a complete DifferentialSet and return a verdict.
One-shot wrapper around evaluate. For incremental sampling, call
evaluate directly.
§Errors
Returns AnalyzerError::InsufficientSamples when fewer samples than
required_samples were supplied.
Sourcefn required_samples(&self) -> usize
fn required_samples(&self) -> usize
Minimum number of exchange pairs needed before analyze returns Ok.
Default is 1. Analyzers with adaptive sampling loops override this.