Struct IoForwardService
pub struct IoForwardService { /* private fields */ }net only.Expand description
A proxy Service which takes a BridgeIo
and copies the bytes of both the source and target Ios
bidirectionally.
The service observes shutdown via the ShutdownGuard of the
Executor passed at construction (if any), enforces an optional
idle timeout that closes the bridge when neither direction has made
byte progress within the configured window, and emits a single
structured close event when the bridge ends.
Implementations§
§impl IoForwardService
impl IoForwardService
pub fn new(executor: Executor) -> IoForwardService
pub fn new(executor: Executor) -> IoForwardService
Create a new IoForwardService using the given Executor.
pub fn maybe_with_idle_timeout(
self,
timeout: Option<Duration>,
) -> IoForwardService
pub fn maybe_with_idle_timeout( self, timeout: Option<Duration>, ) -> IoForwardService
Per-direction idle timeout. When set, the bridge closes with reason
BridgeCloseReason::IdleTimeout if no byte progress is observed
in either direction within timeout.
None (the default) disables idle detection.
pub fn maybe_set_idle_timeout(
&mut self,
timeout: Option<Duration>,
) -> &mut IoForwardService
pub fn maybe_set_idle_timeout( &mut self, timeout: Option<Duration>, ) -> &mut IoForwardService
Per-direction idle timeout. When set, the bridge closes with reason
BridgeCloseReason::IdleTimeout if no byte progress is observed
in either direction within timeout.
None (the default) disables idle detection.
pub fn with_idle_timeout(self, timeout: Duration) -> IoForwardService
pub fn with_idle_timeout(self, timeout: Duration) -> IoForwardService
Per-direction idle timeout. When set, the bridge closes with reason
BridgeCloseReason::IdleTimeout if no byte progress is observed
in either direction within timeout.
None (the default) disables idle detection.
pub fn set_idle_timeout(&mut self, timeout: Duration) -> &mut IoForwardService
pub fn set_idle_timeout(&mut self, timeout: Duration) -> &mut IoForwardService
Per-direction idle timeout. When set, the bridge closes with reason
BridgeCloseReason::IdleTimeout if no byte progress is observed
in either direction within timeout.
None (the default) disables idle detection.
pub fn without_idle_timeout(self) -> IoForwardService
pub fn without_idle_timeout(self) -> IoForwardService
Per-direction idle timeout. When set, the bridge closes with reason
BridgeCloseReason::IdleTimeout if no byte progress is observed
in either direction within timeout.
None (the default) disables idle detection.
pub fn unset_idle_timeout(&mut self) -> &mut IoForwardService
pub fn unset_idle_timeout(&mut self) -> &mut IoForwardService
Per-direction idle timeout. When set, the bridge closes with reason
BridgeCloseReason::IdleTimeout if no byte progress is observed
in either direction within timeout.
None (the default) disables idle detection.
pub fn with_shutdown_grace(self, grace: Duration) -> IoForwardService
pub fn with_shutdown_grace(self, grace: Duration) -> IoForwardService
Per-half cap on graceful shutdown. When the bridge unwinds it calls
shutdown() on each write half bounded by this duration; if the
inner type blocks (e.g. a TLS layer waiting for close_notify),
the shutdown is abandoned and the half is dropped.
Default: 50ms.
pub fn set_shutdown_grace(&mut self, grace: Duration) -> &mut IoForwardService
pub fn set_shutdown_grace(&mut self, grace: Duration) -> &mut IoForwardService
Per-half cap on graceful shutdown. When the bridge unwinds it calls
shutdown() on each write half bounded by this duration; if the
inner type blocks (e.g. a TLS layer waiting for close_notify),
the shutdown is abandoned and the half is dropped.
Default: 50ms.
pub fn with_buf_size(self, size: usize) -> IoForwardService
pub fn with_buf_size(self, size: usize) -> IoForwardService
Per-direction copy buffer size (in bytes).
Default: 8 KiB.
pub fn set_buf_size(&mut self, size: usize) -> &mut IoForwardService
pub fn set_buf_size(&mut self, size: usize) -> &mut IoForwardService
Per-direction copy buffer size (in bytes).
Default: 8 KiB.
Trait Implementations§
§impl Clone for IoForwardService
impl Clone for IoForwardService
§fn clone(&self) -> IoForwardService
fn clone(&self) -> IoForwardService
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for IoForwardService
impl Debug for IoForwardService
§impl Default for IoForwardService
impl Default for IoForwardService
§fn default() -> IoForwardService
fn default() -> IoForwardService
§impl<S, T> Service<BridgeIo<S, T>> for IoForwardService
impl<S, T> Service<BridgeIo<S, T>> for IoForwardService
§async fn serve(
&self,
__arg1: BridgeIo<S, T>,
) -> Result<<IoForwardService as Service<BridgeIo<S, T>>>::Output, <IoForwardService as Service<BridgeIo<S, T>>>::Error>
async fn serve( &self, __arg1: BridgeIo<S, T>, ) -> Result<<IoForwardService as Service<BridgeIo<S, T>>>::Output, <IoForwardService as Service<BridgeIo<S, T>>>::Error>
§fn boxed(self) -> BoxService<Input, Self::Output, Self::Error>
fn boxed(self) -> BoxService<Input, Self::Output, Self::Error>
Auto Trait Implementations§
impl Freeze for IoForwardService
impl RefUnwindSafe for IoForwardService
impl Send for IoForwardService
impl Sync for IoForwardService
impl Unpin for IoForwardService
impl UnsafeUnpin for IoForwardService
impl UnwindSafe for IoForwardService
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§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 rama_grpc::Request§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§fn and<P, B, E>(self, other: P) -> And<T, P>
fn and<P, B, E>(self, other: P) -> And<T, P>
Policy that returns Action::Follow only if self and other return
Action::Follow. Read more§impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
fn rama_try_from(value: T) -> Result<U, <U as RamaTryFrom<T>>::Error>
§impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
type Error = <U as RamaTryFrom<T, CrateMarker>>::Error
fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T, CrateMarker>>::Error>
§impl<V, F> ValueFormatter<&V> for F
impl<V, F> ValueFormatter<&V> for F
§fn format_value(writer: impl ValueWriter, value: &&V)
fn format_value(writer: impl ValueWriter, value: &&V)
value to writer§impl<V, F> ValueFormatter<Arc<V>> for F
impl<V, F> ValueFormatter<Arc<V>> for F
§fn format_value(writer: impl ValueWriter, value: &Arc<V>)
fn format_value(writer: impl ValueWriter, value: &Arc<V>)
value to writer§impl<V, F> ValueFormatter<Box<V>> for F
impl<V, F> ValueFormatter<Box<V>> for F
§fn format_value(writer: impl ValueWriter, value: &Box<V>)
fn format_value(writer: impl ValueWriter, value: &Box<V>)
value to writer§impl<V, F> ValueFormatter<Cow<'_, V>> for F
impl<V, F> ValueFormatter<Cow<'_, V>> for F
§fn format_value(writer: impl ValueWriter, value: &Cow<'_, V>)
fn format_value(writer: impl ValueWriter, value: &Cow<'_, V>)
value to writer§impl<V, F> ValueFormatter<Option<V>> for Fwhere
F: ValueFormatter<V> + ?Sized,
impl<V, F> ValueFormatter<Option<V>> for Fwhere
F: ValueFormatter<V> + ?Sized,
§fn format_value(writer: impl ValueWriter, value: &Option<V>)
fn format_value(writer: impl ValueWriter, value: &Option<V>)
value to writer