pub struct RoutingBackend {
pub service: String,
pub port: u16,
pub tls_issuer: Option<String>,
pub ingress_annotations: BTreeMap<String, String>,
}Expand description
Backend Service the FQDN’s Ingress routes traffic to.
Fields§
§service: StringIn-cluster Service name (same namespace as the Process).
port: u16Port number on the Service to route to.
tls_issuer: Option<String>ClusterIssuer name for TLS. None ⇒ reconciler-config
default (typically letsencrypt-prod or the cluster’s
SPIRE-issuing issuer).
ingress_annotations: BTreeMap<String, String>Annotations stamped on every emitted Ingress. Common keys:
nginx.ingress.kubernetes.io/rate-limit, nginx.ingress. kubernetes.io/proxy-body-size. The reconciler MERGES these
with its own annotations; conflict ⇒ this map wins.
Implementations§
Source§impl RoutingBackend
impl RoutingBackend
Sourcepub fn plain(service: impl Into<String>, port: u16) -> Self
pub fn plain(service: impl Into<String>, port: u16) -> Self
Compose a RoutingBackend pinned to the “reconciler-default
TLS issuer, no per-Ingress annotations” shape (tls_issuer: None, ingress_annotations: BTreeMap::new()) — the ONE
substrate primitive owning the 4-slot RoutingBackend { service, port, tls_issuer: None, ingress_annotations: BTreeMap::new() }
fixture literal every consumer restated by hand pre-lift.
Pre-lift the same 4-slot chain (service: <s>.into(), port: <u16>, tls_issuer: None, ingress_annotations: BTreeMap::new()) was hand-authored at SEVEN workspace-wide
sites past the ★★ PRIME-DIRECTIVE ≥ 2 duplication threshold,
EVERY one of them the “default-issuer, empty-annotations”
shape:
tatara-process::routing— three sites: thedemo_routingseed plus two round-trip pins (empty_routing_resolves_no_hostnames,empty_fields_skip_serialize).tatara-reconciler::edges— one site: theapi_backendtest fixture consumed by everyIngressEdge/DnsEndpointEdgerender pin.tatara-reconciler::render— three sites: thetwo_hostname_routingseed’s backend, theempty_hostnames_emits_nothingpin, and theanonymous_hostname_uses_content_hashpin.
Post-lift every callsite reads RoutingBackend::plain(<service>, <port>) and the four-slot struct’s tls_issuer +
ingress_annotations slots stay owned by the ONE substrate
site — a future normalization (a per-fleet default ClusterIssuer
selection, a per-fleet baseline Ingress annotation set, a
SPIRE-vs-Let’s-Encrypt discriminator) lands here exactly once
and every consumer inherits the upgrade mechanically. The
impl Into<String> bound on service accepts every pre-lift
caller shape verbatim.
Theory anchor: THEORY.md §VI.1 (generation over composition —
the RoutingBackend { service, port, tls_issuer: None, ingress_annotations: BTreeMap::new() } fixture literal recurred
at seven hand-authored sites past the ★★ PRIME-DIRECTIVE ≥ 2
duplication trigger, and is lifted to ONE owner here).
THEORY.md §II.1 invariant 5 (composition preserves proofs —
a regression that drifted the default tls_issuer sentinel
from None to a hardcoded string, or reordered the four
struct slots, surfaces at the
plain_composes_byte_identical_to_pre_lift_literal_across_every_service_port_pair
pin below rather than as silent skew at every downstream
fixture).
Trait Implementations§
Source§impl Clone for RoutingBackend
impl Clone for RoutingBackend
Source§fn clone(&self) -> RoutingBackend
fn clone(&self) -> RoutingBackend
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 RoutingBackend
impl Debug for RoutingBackend
Source§impl<'de> Deserialize<'de> for RoutingBackend
impl<'de> Deserialize<'de> for RoutingBackend
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for RoutingBackend
Source§impl JsonSchema for RoutingBackend
impl JsonSchema for RoutingBackend
Source§fn schema_name() -> String
fn schema_name() -> String
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn is_referenceable() -> bool
fn is_referenceable() -> bool
$ref keyword. Read moreSource§impl PartialEq for RoutingBackend
impl PartialEq for RoutingBackend
Source§impl Serialize for RoutingBackend
impl Serialize for RoutingBackend
impl StructuralPartialEq for RoutingBackend
Auto Trait Implementations§
impl Freeze for RoutingBackend
impl RefUnwindSafe for RoutingBackend
impl Send for RoutingBackend
impl Sync for RoutingBackend
impl Unpin for RoutingBackend
impl UnsafeUnpin for RoutingBackend
impl UnwindSafe for RoutingBackend
Blanket Implementations§
impl<T> AppData for Twhere
T: OptionalSend + OptionalSync + 'static + OptionalSerde,
impl<T> AppDataResponse for Twhere
T: OptionalSend + OptionalSync + 'static + OptionalSerde,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreimpl<T> OptionalSend for T
impl<T> OptionalSync for T
Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);