pub struct Multiplexer {
SideCarIdentifier: String,
Sink: Sender<Envelope>,
Pending: Arc<DashMap<u64, Sender<GenericResponse>>>,
NextRequestIdentifier: AtomicU64,
Closed: AtomicBool,
}Expand description
One multiplexer per sidecar connection. Holds the outbound sink, the pending-request correlation map, and a shared-state shutdown flag.
Fields§
§SideCarIdentifier: String§Sink: Sender<Envelope>§Pending: Arc<DashMap<u64, Sender<GenericResponse>>>§NextRequestIdentifier: AtomicU64§Closed: AtomicBoolImplementations§
Source§impl Multiplexer
impl Multiplexer
Sourcepub async fn Open(
SideCarIdentifier: String,
Client: CocoonServiceClient<Channel>,
) -> Result<Arc<Self>, VineError>
pub async fn Open( SideCarIdentifier: String, Client: CocoonServiceClient<Channel>, ) -> Result<Arc<Self>, VineError>
Open a bidirectional streaming channel against an existing
CocoonServiceClient. Spawns the read pump as a detached
tokio task and registers the multiplexer in the global
registry. Returns once the stream is established.
Sourcepub fn Lookup(SideCarIdentifier: &str) -> Option<Arc<Self>>
pub fn Lookup(SideCarIdentifier: &str) -> Option<Arc<Self>>
Look up the multiplexer for a sidecar. Returns None if no
streaming connection has been opened for that sidecar (the
caller should fall back to the unary path).
Sourcepub fn Deregister(SideCarIdentifier: &str)
pub fn Deregister(SideCarIdentifier: &str)
Drop the registry entry. Called by the read-pump when the stream closes.
Sourcepub async fn Notify(
&self,
Method: String,
Parameters: Value,
) -> Result<(), VineError>
pub async fn Notify( &self, Method: String, Parameters: Value, ) -> Result<(), VineError>
Send a notification frame (fire-and-forget). Non-blocking
modulo Sink backpressure (capacity SINK_CAPACITY).
Sourcepub async fn Request(
&self,
Method: String,
Parameters: Value,
Timeout: Duration,
) -> Result<Value, VineError>
pub async fn Request( &self, Method: String, Parameters: Value, Timeout: Duration, ) -> Result<Value, VineError>
Send a request and await the matching response. Cancels the
pending entry on timeout. The future is Send + 'static-clean
so callers can drive it inside tokio::select! for finer-
grained cancellation.
Sourcepub async fn Cancel(&self, RequestIdentifier: u64) -> Result<(), VineError>
pub async fn Cancel(&self, RequestIdentifier: u64) -> Result<(), VineError>
Send a Cancel frame asking the peer to abort an in-flight
request matching RequestIdentifier. Best-effort; the peer
chooses whether to honour it.
pub fn IsClosed(&self) -> bool
pub fn SideCarIdentifierBorrow(&self) -> &str
Auto Trait Implementations§
impl !Freeze for Multiplexer
impl !RefUnwindSafe for Multiplexer
impl Send for Multiplexer
impl Sync for Multiplexer
impl Unpin for Multiplexer
impl UnsafeUnpin for Multiplexer
impl !UnwindSafe for Multiplexer
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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 more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].