Struct BorrowedArc

Source
#[repr(transparent)]
pub struct BorrowedArc<T>(*const T);
Expand description

Provides an access to the value of Arc on Context without cloning a reference.

We need this type because return a reference from Context require static lifetime, which allow the caller to store it at a global level. Once the value is destroyed that reference will be invalid. We can solve this by return a cloned Arc but most of the time the caller just want a temporary access to the value, which mean the increment and decrement of a reference is not needed so we invent this type to solve this problem.

This type work by making itself not Send and Sync, which prevent the caller from storing it at a global level.

Tuple Fields§

§0: *const T

Implementations§

Source§

impl<T> BorrowedArc<T>

Source

pub(super) const unsafe fn new(v: *const T) -> Option<Self>

§Safety

v must be owned by Arc if not null.

Source

pub(super) const unsafe fn from_non_null(v: *const T) -> Self

§Safety

v must be owned by Arc.

Source

pub fn as_ptr(this: &Self) -> *const T

Note that this is an associated function, which means that you have to call it as BorrowedArc::as_ptr(v) instead of v.as_ptr(). This is so that there is no conflict with a method on the inner type.

Source

pub fn into_owned(self) -> Arc<T>

Trait Implementations§

Source§

impl<T> Clone for BorrowedArc<T>

Source§

fn clone(&self) -> Self

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<T> Deref for BorrowedArc<T>

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<T> Copy for BorrowedArc<T>

Auto Trait Implementations§

§

impl<T> Freeze for BorrowedArc<T>

§

impl<T> RefUnwindSafe for BorrowedArc<T>
where T: RefUnwindSafe,

§

impl<T> !Send for BorrowedArc<T>

§

impl<T> !Sync for BorrowedArc<T>

§

impl<T> Unpin for BorrowedArc<T>

§

impl<T> UnwindSafe for BorrowedArc<T>
where T: RefUnwindSafe,

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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.