pub struct RouteDecision {
pub target: Target,
pub upstream_protocol: Protocol,
pub header_ops: Vec<HeaderOp>,
pub body_transform: BodyTransform,
pub epoch: Epoch,
}Expand description
The routing decision: the single destination plus the transforms to apply.
In v1 exactly one Target is resolved, no synchronous fan-out (ADR-002).
The Epoch is the placement-table generation the decision was derived
from; it is stamped onto the write so the sink can reject a stale-epoch write
during a migration (docs/06 §2).
Read-path concerns are derived, not separate fields: the mandatory
partition query filter and the response field-strip are both computed from
BodyTransform (the injected PartitionId field is the isolation key, see
osproxy-engine’s read module), and cursor (scroll/PIT) affinity is handled
by the engine’s cursor signer on those endpoints. Deriving them from the same
body_transform that drives the write-path inject is what keeps the two
provably inverse (docs/02, round-trip property test in docs/09).
§Examples
use osproxy_spi::{RouteDecision, BodyTransform, Protocol};
use osproxy_spi::core::{Target, ClusterId, IndexName, Epoch};
let target = Target::new(ClusterId::from("eu-1"), IndexName::from("orders"));
let decision = RouteDecision::passthrough(target, Protocol::Http1, Epoch::new(1));
assert!(decision.body_transform.is_none());
assert_eq!(decision.epoch, Epoch::new(1));Fields§
§target: TargetThe single physical destination.
upstream_protocol: ProtocolThe protocol to use upstream (may differ from ingress).
header_ops: Vec<HeaderOp>Header mutations to apply before forwarding.
body_transform: BodyTransformThe body transform to apply.
epoch: EpochThe placement epoch this decision was derived from.
Implementations§
Source§impl RouteDecision
impl RouteDecision
Sourcepub fn passthrough(
target: Target,
upstream_protocol: Protocol,
epoch: Epoch,
) -> Self
pub fn passthrough( target: Target, upstream_protocol: Protocol, epoch: Epoch, ) -> Self
Constructs a decision with no header ops and no body transform.
Sourcepub fn with_body_transform(self, transform: BodyTransform) -> Self
pub fn with_body_transform(self, transform: BodyTransform) -> Self
Sets the body transform (builder style).
Trait Implementations§
Source§impl Clone for RouteDecision
impl Clone for RouteDecision
Source§fn clone(&self) -> RouteDecision
fn clone(&self) -> RouteDecision
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RouteDecision
impl Debug for RouteDecision
impl Eq for RouteDecision
Source§impl PartialEq for RouteDecision
impl PartialEq for RouteDecision
Source§fn eq(&self, other: &RouteDecision) -> bool
fn eq(&self, other: &RouteDecision) -> bool
self and other values to be equal, and is used by ==.