Trait BorrowForeign

Source
pub trait BorrowForeign<'a>: FreeForeign {
    type Storage: 'a;

    // Required method
    fn borrow_foreign(
        &'a self,
    ) -> BorrowedPointer<'a, Self::Foreign, Self::Storage>;
}
Expand description

A type for which a C representation can be borrowed without cloning.

Required Associated Types§

Source

type Storage: 'a

The type of any extra data that are needed while the BorrowedPointer is alive.

Required Methods§

Source

fn borrow_foreign(&'a self) -> BorrowedPointer<'a, Self::Foreign, Self::Storage>

Return a wrapper for a C representation of self. The wrapper borrows the data from self and allows access via a constant pointer.

let s = CString::new("Hello, world!").unwrap();
let borrowed = s.borrow_foreign();
let len = unsafe { libc::strlen(borrowed.as_ptr()) };

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<'a> BorrowForeign<'a> for bool

Source§

type Storage = &'a bool

Source§

fn borrow_foreign(&self) -> BorrowedPointer<'_, Self::Foreign, &Self>

Source§

impl<'a> BorrowForeign<'a> for f32

Source§

type Storage = &'a f32

Source§

fn borrow_foreign(&self) -> BorrowedPointer<'_, Self::Foreign, &Self>

Source§

impl<'a> BorrowForeign<'a> for f64

Source§

type Storage = &'a f64

Source§

fn borrow_foreign(&self) -> BorrowedPointer<'_, Self::Foreign, &Self>

Source§

impl<'a> BorrowForeign<'a> for i8

Source§

type Storage = &'a i8

Source§

fn borrow_foreign(&self) -> BorrowedPointer<'_, Self::Foreign, &Self>

Source§

impl<'a> BorrowForeign<'a> for i16

Source§

type Storage = &'a i16

Source§

fn borrow_foreign(&self) -> BorrowedPointer<'_, Self::Foreign, &Self>

Source§

impl<'a> BorrowForeign<'a> for i32

Source§

type Storage = &'a i32

Source§

fn borrow_foreign(&self) -> BorrowedPointer<'_, Self::Foreign, &Self>

Source§

impl<'a> BorrowForeign<'a> for i64

Source§

type Storage = &'a i64

Source§

fn borrow_foreign(&self) -> BorrowedPointer<'_, Self::Foreign, &Self>

Source§

impl<'a> BorrowForeign<'a> for isize

Source§

type Storage = &'a isize

Source§

fn borrow_foreign(&self) -> BorrowedPointer<'_, Self::Foreign, &Self>

Source§

impl<'a> BorrowForeign<'a> for u8

Source§

type Storage = &'a u8

Source§

fn borrow_foreign(&self) -> BorrowedPointer<'_, Self::Foreign, &Self>

Source§

impl<'a> BorrowForeign<'a> for u16

Source§

type Storage = &'a u16

Source§

fn borrow_foreign(&self) -> BorrowedPointer<'_, Self::Foreign, &Self>

Source§

impl<'a> BorrowForeign<'a> for u32

Source§

type Storage = &'a u32

Source§

fn borrow_foreign(&self) -> BorrowedPointer<'_, Self::Foreign, &Self>

Source§

impl<'a> BorrowForeign<'a> for u64

Source§

type Storage = &'a u64

Source§

fn borrow_foreign(&self) -> BorrowedPointer<'_, Self::Foreign, &Self>

Source§

impl<'a> BorrowForeign<'a> for usize

Source§

type Storage = &'a usize

Source§

fn borrow_foreign(&self) -> BorrowedPointer<'_, Self::Foreign, &Self>

Source§

impl<'a> BorrowForeign<'a> for CStr

Source§

impl<'a, B> BorrowForeign<'a> for Cow<'a, B>
where B: 'a + ToOwned + ?Sized + BorrowForeign<'a>,

Source§

impl<'a, T> BorrowForeign<'a> for Option<T>
where T: BorrowForeign<'a>,

Source§

impl<'a, T> BorrowForeign<'a> for [T]
where T: FixedAlloc + FreeForeign<Foreign = T> + BorrowForeign<'a, Storage = &'a T> + 'a,

Source§

type Storage = &'a [T]

Source§

fn borrow_foreign(&self) -> BorrowedPointer<'_, Self::Foreign, &Self>

Source§

impl<'a, T> BorrowForeign<'a> for Box<T>
where T: BorrowForeign<'a>,

Source§

type Storage = <T as BorrowForeign<'a>>::Storage

Source§

fn borrow_foreign(&'a self) -> BorrowedPointer<'a, Self::Foreign, Self::Storage>

Source§

impl<'a, T> BorrowForeign<'a> for Vec<T>
where [T]: BorrowForeign<'a>,

Implementors§