parlov-probe 0.3.0

Probe engine trait and HTTP execution layer for parlov.
Documentation
//! Probe engine for parlov: HTTP execution, TLS control, timing, and rate limiting.
//!
//! This crate owns the network-facing half of the pipeline. It pulls in the full async/HTTP/TLS
//! stack so that changes to statistical thresholds in `parlov-analysis` do not trigger a
//! recompile of `reqwest`, `hyper`, or `rustls`.

#![deny(clippy::all)]
#![warn(clippy::pedantic)]
#![deny(missing_docs)]

pub mod http;

use parlov_core::{Error, ProbeDefinition, ProbeExchange};

/// Executes a single HTTP interaction and returns the full exchange (request + response paired).
///
/// One call to `execute` produces one [`ProbeExchange`]. The scheduler drives the
/// `Analyzer::evaluate` loop in `parlov-analysis` and collects exchanges into a
/// `DifferentialSet`.
///
/// Implementations must be `Send + Sync` so they can be shared across async tasks.
pub trait Probe: Send + Sync {
    /// Execute one HTTP interaction and return the paired exchange.
    fn execute(
        &self,
        def: &ProbeDefinition,
    ) -> impl std::future::Future<Output = Result<ProbeExchange, Error>> + Send;
}