Struct BorrowedPointer

Source
pub struct BorrowedPointer<'a, P, T: 'a> { /* private fields */ }
Expand description

A pointer whose contents were borrowed from a Rust object, and therefore whose lifetime is limited to the lifetime of the underlying Rust object. The Rust object was borrowed from a shared reference, and therefore the pointer is not mutable.

Implementations§

Source§

impl<'a, P, T: 'a> BorrowedPointer<'a, P, T>

Source

pub unsafe fn new(ptr: *const P, storage: T) -> Self

Return a new BorrowedPointer that wraps the pointer ptr. storage can contain any other data that ptr points to, and that should be dropped when the BorrowedPointer goes out of scope.

§Safety

The pointer must be valid for the lifetime of the BorrowedPointer. If the pointer points into the storage, T must be pinned.

Source

pub fn as_ptr(&self) -> *const P

Return the pointer that is stored in the BorrowedPointer. The pointer is valid for as long as the BorrowedPointer itself.

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

impl<'a, T: CloneToForeign + ?Sized + 'a> BorrowedPointer<'a, T::Foreign, &T>

Source

pub fn to_owned(&self) -> OwnedPointer<T>

Clone the underlying data for the receiver, creating a new C datum that contains the same data.

let s = CString::new("Hello, world!").unwrap();
assert_eq!(s.borrow_foreign().as_ptr(), s.as_ptr());
assert_ne!(s.borrow_foreign().to_owned().as_ptr(), s.as_ptr());
let s: i8 = 42;
assert_eq!(s.borrow_foreign().as_ptr(), &s as *const _);
assert_ne!(s.borrow_foreign().to_owned().as_ptr(), &s as *const _);

Trait Implementations§

Source§

impl<'a, P, T: 'a> Debug for BorrowedPointer<'a, P, T>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a, P, T> Freeze for BorrowedPointer<'a, P, T>
where T: Freeze,

§

impl<'a, P, T> RefUnwindSafe for BorrowedPointer<'a, P, T>

§

impl<'a, P, T> !Send for BorrowedPointer<'a, P, T>

§

impl<'a, P, T> !Sync for BorrowedPointer<'a, P, T>

§

impl<'a, P, T> Unpin for BorrowedPointer<'a, P, T>
where T: Unpin,

§

impl<'a, P, T> UnwindSafe for BorrowedPointer<'a, P, T>

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, 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.