Skip to main content

AnyBackend

Enum AnyBackend 

Source
#[non_exhaustive]
pub enum AnyBackend { Boxed(BoxedBackend), }
Expand description

Enum dispatch backend for eliminating vtable indirection on the hot path.

§Enum Dispatch vs Vtable

This enum uses enum dispatch (also known as “inline dispatch”) to avoid vtable lookups for the built-in backends:

ApproachProsCons
Enum dispatch (AnyBackend)Zero-cost: no vtable indirection, better inlining, cache-friendlyClosed set of variants
Vtable (Box<dyn Backend>)Open for extension, dynamic plugin loadingVirtual call overhead, harder to inline

§Migration Path: Adding a New Backend (e.g., kqueue)

  1. Create a new crate: kqueue/Cargo.toml
  2. Implement the trait: impl Backend for KqueueBackend { ... }
  3. Add the variant (optional, for zero-cost):
    // In core/src/backend.rs
    pub enum AnyBackend {
        Boxed(BoxedBackend),
        Kqueue(wireshift_kqueue::KqueueBackend), // Zero-cost variant
    }
  4. Feature-flag it in the workspace Cargo.toml:
    [features]
    kqueue = ["dep:wireshift-kqueue"]

§Send + Sync Guarantees

AnyBackend is Send + Sync because every variant contains only Send + Sync types. The compiler automatically derives these traits - no unsafe impl needed. If a future variant breaks this contract, the compiler will reject it.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Boxed(BoxedBackend)

A boxed backend (legacy or third-party).

Use this for foreign backends that aren’t part of the core wireshift workspace. For built-in backends, prefer dedicated variants for zero-cost dispatch.

Implementations§

Source§

impl AnyBackend

Source

pub fn from_boxed(backend: BoxedBackend) -> Self

Wrap a boxed backend into the enum dispatch.

Trait Implementations§

Source§

impl Backend for AnyBackend

Source§

fn kind(&self) -> BackendKind

Returns the backend kind.
Source§

fn submit(&self, submission: BackendSubmission) -> Result<()>

Submits work to the backend. Read more
Source§

fn cancel(&self, cancellation: CancellationHandle) -> Result<()>

Requests cancellation for in-flight work. Read more
Source§

fn shutdown(&self) -> Result<()>

Shuts the backend down. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more