pub struct FlowGraphMeta {
pub version_hash: [u8; 32],
pub compiled_at: SystemTime,
pub source_files: Vec<PathBuf>,
pub feature_set: &'static [&'static str],
pub short_circuit_response_entry: BTreeMap<NodeId, NodeId>,
pub listener_tls: BTreeMap<SocketAddr, ListenerTlsSpec>,
pub listener_kinds: BTreeMap<SocketAddr, ListenerKind>,
pub listener_transports: BTreeMap<SocketAddr, Transport>,
pub annotations: Vec<DryRunAnnotation>,
}Fields§
§version_hash: [u8; 32]§compiled_at: SystemTime§source_files: Vec<PathBuf>§feature_set: &'static [&'static str]§short_circuit_response_entry: BTreeMap<NodeId, NodeId>Map of L7-listener entry NodeId → synthesised
Terminate(WriteHttpResponse) NodeId. The executor jumps here
when an L7 request middleware returns
Decision::Short(ShortCircuit::Response(_)): it sets the response
slot and walks to the synth target so the response runs through
the standard WriteHttpResponse write path. Empty for L4-only
graphs and for any L7 entry whose listener is not bound to a
post-Upgrade chain (which the lower pass guarantees never
happens for legal L7 listeners). See spec/flow-model.md
§ The compiled form.
#[serde(default)] keeps older dry-run JSON snapshots
deserializable: missing field decodes as an empty map, which
matches the legacy “no L7 listeners” graph shape.
listener_tls: BTreeMap<SocketAddr, ListenerTlsSpec>Per-listener cert pool. Symbolic — each entry is the aggregated
(default, sni_certs) view across every rule on the bind
address that carried a tls block; the engine’s link stage
reads PEM files referenced here and builds a rustls::ServerConfig
with an SNI resolver that falls back to default for unmatched
SNI. Listeners absent from this map are cleartext. See
spec/crates/engine-tls.md § Termination flow (L4 → L7 upgrade) and § SNI peek (L4, no decrypt).
#[serde(default)] for the same wire-compat reason as the map
above.
listener_kinds: BTreeMap<SocketAddr, ListenerKind>Per-listener dispatch posture, derived from each entry’s
reachable-terminator set. Populated by the lower pass; the
engine reads it in crate::ir::ListenerKind-aware dispatch
(spec/crates/engine.md § Dispatch table).
Listeners absent from this map are treated as Http by the
engine’s defensive accessor — but the lower pass guarantees
every entry address has an explicit kind.
listener_transports: BTreeMap<SocketAddr, Transport>Per-listener transport, derived from each entry’s reachable
fetches. A listener with any reachable L4Forward whose
args.transport == "udp" is Transport::Udp; everything else
is Transport::Tcp. Mixing UDP L4Forward with any other
fetch kind on the same listener is a compile error — the
physical socket is single-protocol and cannot serve both
transports concurrently. See spec/crates/engine.md
§ udp_dispatch. #[serde(default)] keeps older dry-run
snapshots loadable; absent listeners are treated as Tcp.
annotations: Vec<DryRunAnnotation>Compile-time annotations the lower pass emits as observations
about the produced graph — surfaced in vane compile --dry-run
so operators see synthetic-route insertions and rule-shadowing
warnings without grepping logs. Stable wire format keyed by
kind (e.g. "acme-injected", "shadowed-by-acme").
#[serde(default)] keeps older snapshots loadable: an absent
field decodes to an empty Vec, matching pre-ACME graph shape.
Trait Implementations§
Source§impl Clone for FlowGraphMeta
impl Clone for FlowGraphMeta
Source§fn clone(&self) -> FlowGraphMeta
fn clone(&self) -> FlowGraphMeta
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more