Struct embedded_nal::SharableStack[][src]

pub struct SharableStack<T> { /* fields omitted */ }
Expand description

Sharable wrapper for a network stack implementation.

An implementation of the stack traits that can contain (and provide provide single-threaded shared access to) another stack implementation. A direct implementation can only be used when owned or with a mutable reference. This implementation will store another implementation internally, and yield an arbitrary number of shared references to it, which themselves implement the stack traits.

use embedded_nal::SharableStack;
let mut driver = SomeNalDriver::new();
// Driver can only be used in one place at a time.
let mut sharable_driver = SharableStack::new(driver);
// Sharable driver can't do anything on its own, but it can create many usable copies.
let mut shared_driver0 = sharable_driver.acquire();
let mut shared_driver1 = sharable_driver.acquire();
// These shared copies can be passed around to other parts of an application's code, and used
// independently.
let mut socket0 = shared_driver0.socket()?;
shared_driver0.connect(&mut socket0, SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(127, 0, 0, 1), 8080)));
// ...

// ... and somewhere else
let mut socket1 = shared_driver1.socket()?;
shared_driver1.connect(&mut socket1, SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(127, 0, 0, 1), 8443)));
// ...

Implementations

impl<T> SharableStack<T>[src]

pub fn new(stack: T) -> Self[src]

Create a new SharedStack that contains and uses some other stack implementation.

pub fn acquire(&self) -> SharedStack<'_, T>[src]

Returns a shared reference to the driver that can be used as a first-class implementation.

Auto Trait Implementations

impl<T> Send for SharableStack<T> where
    T: Send

impl<T> !Sync for SharableStack<T>

impl<T> Unpin for SharableStack<T> where
    T: Unpin

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

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

Performs the conversion.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

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

Performs the conversion.