Struct FfiBuffer

Source
#[repr(C)]
pub struct FfiBuffer<'a> { pub data: *mut u8, pub data_len: usize, /* private fields */ }
Expand description

A Rust u8 mutable slice, but compatible with FFI. Assume the lifetime is only valid until the callee returns to the caller.

Fields§

§data: *mut u8

A pointer to where the data can be put

§data_len: usize

The maximum number of bytes we can store in this buffer

Implementations§

Source§

impl<'a> FfiBuffer<'a>

Source

pub fn new(s: &'a mut [u8]) -> FfiBuffer<'a>

Create a new buffer we can send over the FFI.

This buffer is a mutable borrow of some storage space allocated elsewhere. If you are given this type in an API, assume it is only valid for as long as the function call you were given in it.

Source

pub fn empty() -> FfiBuffer<'static>

Make an empty slice.

Source

pub fn as_slice(&self) -> &[u8]

Turn this buffer into a Rust byte slice.

Source

pub fn as_mut_slice(&mut self) -> Option<&mut [u8]>

Turn this buffer into a Rust mutable byte slice.

You will get None if the buffer is empty (i.e. has zero length).

Trait Implementations§

Source§

impl<'a> Clone for FfiBuffer<'a>

Source§

fn clone(&self) -> FfiBuffer<'a>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for FfiBuffer<'_>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<'a> From<&'a mut [u8]> for FfiBuffer<'a>

Source§

fn from(input: &'a mut [u8]) -> FfiBuffer<'a>

Convert from a Rust byte slice into an FFI compatible byte slice

Source§

impl<'a> Ord for FfiBuffer<'a>

Source§

fn cmp(&self, rhs: &FfiBuffer<'a>) -> Ordering

Compare two ApiBuffers.

We just make some actual slices and compare then.

1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl<'a> PartialEq for FfiBuffer<'a>

Source§

fn eq(&self, rhs: &FfiBuffer<'a>) -> bool

Check if two ApiBuffers are equal.

We just make some actual slices and compare then.

1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<'a> PartialOrd for FfiBuffer<'a>

Source§

fn partial_cmp(&self, rhs: &FfiBuffer<'a>) -> Option<Ordering>

Compare two ApiBuffers.

We are Ord so we can defer to that.

1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl<'a> Eq for FfiBuffer<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for FfiBuffer<'a>

§

impl<'a> RefUnwindSafe for FfiBuffer<'a>

§

impl<'a> !Send for FfiBuffer<'a>

§

impl<'a> !Sync for FfiBuffer<'a>

§

impl<'a> Unpin for FfiBuffer<'a>

§

impl<'a> UnwindSafe for FfiBuffer<'a>

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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.