pub struct NatsSubjectChannel {
pub subject: String,
pub stream: String,
pub url: Option<String>,
}Expand description
NATS JetStream channel — guaranteed-delivery publish.
Fields§
§subject: StringSubject to publish to. May contain {{run_id}} template
substitution — the worker substitutes the resolved run id at
publish time.
stream: StringJetStream stream the subject belongs to. The stream itself is declared by the consumer chart (e.g. tatara-pool-reconciler) via the pleme-nats broker-only design.
url: Option<String>Optional NATS URL. Defaults to nats://nats.observability.svc.cluster.local:4222.
Implementations§
Source§impl NatsSubjectChannel
impl NatsSubjectChannel
Sourcepub fn resolved_url(&self) -> &str
pub fn resolved_url(&self) -> &str
Resolve the NATS URL, falling back to the in-cluster default.
Sourcepub fn publish(subject: impl Into<String>, stream: impl Into<String>) -> Self
pub fn publish(subject: impl Into<String>, stream: impl Into<String>) -> Self
Compose a NatsSubjectChannel pinned to the in-cluster
default NATS URL (DEFAULT_NATS_URL, stamped as url: None
so Self::resolved_url resolves the same URL on read) and
the given subject + stream — the ONE substrate primitive
owning the 3-slot NatsSubjectChannel { subject, stream, url: None } fixture literal every consumer restated by hand
pre-lift.
Pre-lift the same 3-slot chain (subject: <s>.into(),
stream: <s>.into(), url: None) was hand-authored at SIX
workspace-wide sites past the ★★ PRIME-DIRECTIVE ≥ 2
duplication threshold, EVERY one of them the “default-URL,
subject-and-stream-only” shape (no site in the workspace
stamps a non-None url on a NatsSubjectChannel literal):
tatara-process::export— two sites: thevector_channel_resolves_nats_subjectround-trip fixture plus thesingle_slot_channelclosed-set ambiguity probe.tatara-process::tagged_union— one site: thesingle_slot_vector_channel_probeclosed-set probe (the sibling of thesingle_slot_channelfixture intatara-process::export).tatara-reconciler::render— one site: thespec_receipts_attestedfixture the ephemeral-export-Job renderer’s tests seed.tatara-export-worker::lib— two sites: thesubject_substitutes_run_id_templatetemplate-substitution fixture plus thesubject_passthrough_when_no_templatepassthrough fixture.
Post-lift every callsite reads
NatsSubjectChannel::publish(<subject>, <stream>) and the
three-slot struct’s url slot stays owned by the ONE
substrate site. The impl Into<String> bound on both
positional args accepts every pre-lift caller shape verbatim
— &'static str literals ("S", "EPHEMERAL_RECEIPTS",
"pleme.pleme-dev.ephemeral.{{run_id}}.receipt"), owned
String values, and .into()-terminated chains alike —
without a per-site coercion.
A future addition (a default-URL override for a per-fleet
NATS endpoint, a per-fleet subject prefix normalization, a
stream clamp against a shinryu-registered stream catalog,
or an authenticated NATS URL seed pulled from a config
surface) lands at THIS ONE substrate primitive and every
downstream consumer inherits the upgrade mechanically — no
per-site edit at any of the six listed callers or at future
test fixtures.
Theory anchor: THEORY.md §VI.1 (generation over composition —
the NatsSubjectChannel { subject, stream, url: None }
fixture literal recurred at six 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-URL
sentinel from None to a hardcoded string, or reordered the
three struct slots, surfaces at the
publish_composes_byte_identical_to_pre_lift_literal_across_every_subject_stream_pair
pin below rather than as silent skew at every downstream
fixture).
Trait Implementations§
Source§impl Clone for NatsSubjectChannel
impl Clone for NatsSubjectChannel
Source§fn clone(&self) -> NatsSubjectChannel
fn clone(&self) -> NatsSubjectChannel
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 NatsSubjectChannel
impl Debug for NatsSubjectChannel
Source§impl<'de> Deserialize<'de> for NatsSubjectChannel
impl<'de> Deserialize<'de> for NatsSubjectChannel
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>,
Source§impl JsonSchema for NatsSubjectChannel
impl JsonSchema for NatsSubjectChannel
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 moreAuto Trait Implementations§
impl Freeze for NatsSubjectChannel
impl RefUnwindSafe for NatsSubjectChannel
impl Send for NatsSubjectChannel
impl Sync for NatsSubjectChannel
impl Unpin for NatsSubjectChannel
impl UnsafeUnpin for NatsSubjectChannel
impl UnwindSafe for NatsSubjectChannel
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<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);