pub struct DifferentialSet {
pub baseline: Vec<ProbeExchange>,
pub probe: Vec<ProbeExchange>,
pub canonical: Option<ProbeExchange>,
pub technique: Technique,
}Expand description
Baseline and probe exchange pairs with technique context for differential analysis.
Fields§
§baseline: Vec<ProbeExchange>Known-valid / control exchanges — establishes the expected response surface.
probe: Vec<ProbeExchange>Suspect exchanges — compared against baseline to detect oracle signals.
canonical: Option<ProbeExchange>Optional canonical (unmutated) exchange for control-integrity verification.
Populated by route-mutating strategies (case_normalize, trailing_slash) via the
runner’s third dispatch. Consumed by control_integrity to detect when a path mutation
destroyed routing — canonical 2xx + mutated baseline non-2xx means the mutation broke the
route, and any resulting Contradictory is invalid.
technique: TechniqueTechnique that generated these probes — provides attribution and calibration context.
Implementations§
Source§impl DifferentialSet
impl DifferentialSet
Sourcepub fn new(
baseline: Vec<ProbeExchange>,
probe: Vec<ProbeExchange>,
technique: Technique,
) -> Self
pub fn new( baseline: Vec<ProbeExchange>, probe: Vec<ProbeExchange>, technique: Technique, ) -> Self
Constructs a DifferentialSet with canonical = None (the common case).
Only case_normalize and trailing_slash set canonical after construction.
Sourcepub fn first_harvest_exchange(&self) -> Option<(StatusCode, HeaderMap)>
pub fn first_harvest_exchange(&self) -> Option<(StatusCode, HeaderMap)>
Returns (status, headers) from the first baseline exchange suitable for harvesting.
Priority: 2xx first, then 3xx+Location, then 4xx with JSON content type
(StructuredError — needed by C5 problem-details producer).
Sourcepub fn first_harvest_exchange_with_body(
&self,
) -> Option<(StatusCode, HeaderMap, Bytes)>
pub fn first_harvest_exchange_with_body( &self, ) -> Option<(StatusCode, HeaderMap, Bytes)>
Returns (status, headers, body) from the first baseline exchange suitable for harvesting.
Priority order:
- First 2xx — carries
ETag,Last-Modified,Content-Type, and body for chain producers. - First 3xx with a
Locationheader — for redirect-diff chaining. - First baseline exchange classified as
AuthChallenge,RateLimited, orStructuredError— admits 401/407 (C8 WWW-Authenticate) and 4xx+JSON (C5 body).
Trait Implementations§
Source§impl Clone for DifferentialSet
impl Clone for DifferentialSet
Source§fn clone(&self) -> DifferentialSet
fn clone(&self) -> DifferentialSet
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more