Struct memflow::types::pointer::Pointer

source ·
#[repr(transparent)]
pub struct Pointer<U: Sized, T: ?Sized = ()> { pub inner: U, /* private fields */ }
Expand description

This type can be used in structs that are being read from the target memory. It holds a phantom type that can be used to describe the proper type of the pointer and to read it in a more convenient way.

This module is a direct adaption of CasualX’s great IntPtr crate.

Generally the generic Type should implement the Pod trait to be read into easily. See here for more information on the Pod trait.

Examples

use memflow::types::Pointer64;
use memflow::mem::MemoryView;
use memflow::dataview::Pod;

#[repr(C)]
#[derive(Clone, Debug, Pod)]
struct Foo {
    pub some_value: i64,
}

#[repr(C)]
#[derive(Clone, Debug, Pod)]
struct Bar {
    pub foo_ptr: Pointer64<Foo>,
}

fn read_foo_bar(mem: &mut impl MemoryView) {
    let bar: Bar = mem.read(0x1234.into()).unwrap();
    let foo = bar.foo_ptr.read(mem).unwrap();
    println!("value: {}", foo.some_value);
}
use memflow::types::Pointer64;
use memflow::mem::MemoryView;
use memflow::dataview::Pod;

#[repr(C)]
#[derive(Clone, Debug, Pod)]
struct Foo {
    pub some_value: i64,
}

#[repr(C)]
#[derive(Clone, Debug, Pod)]
struct Bar {
    pub foo_ptr: Pointer64<Foo>,
}

fn read_foo_bar(mem: &mut impl MemoryView) {
    let bar: Bar = mem.read(0x1234.into()).unwrap();
    let foo = mem.read_ptr(bar.foo_ptr).unwrap();
    println!("value: {}", foo.some_value);
}

Fields§

§inner: U

Implementations§

source§

impl<U: PrimitiveAddress, T: ?Sized> Pointer<U, T>

source

pub fn null() -> Self

Returns a pointer64 with a value of zero.

Examples
use memflow::types::Pointer64;

println!("pointer: {}", Pointer64::<()>::null());
source

pub fn is_null(self) -> bool

Returns true if the pointer64 is null.

Examples
use memflow::types::Pointer32;

let ptr = Pointer32::<()>::from(0x1000u32);
assert!(!ptr.is_null());
source

pub fn non_null(self) -> Option<Pointer<U, T>>

Converts the pointer64 to an Option that is None when it is null

Examples
use memflow::types::Pointer64;

assert_eq!(Pointer64::<()>::null().non_null(), None);
assert_eq!(Pointer64::<()>::from(0x1000u64).non_null(), Some(Pointer64::from(0x1000u64)));
source

pub fn to_umem(self) -> umem

Converts the pointer into a raw umem value.

Examples
use memflow::types::{Pointer64, umem};

let ptr = Pointer64::<()>::from(0x1000u64);
let ptr_umem: umem = ptr.to_umem();
assert_eq!(ptr_umem, 0x1000);
source

pub fn address(&self) -> Address

source§

impl<U: PrimitiveAddress, T: Sized> Pointer<U, T>

source

pub fn offset(self, count: imem) -> Self

Calculates the offset from a pointer64

count is in units of T; e.g., a count of 3 represents a pointer offset of 3 * size_of::<T>() bytes.

Panics

This function panics if T is a Zero-Sized Type (“ZST”). This function also panics when offset * size_of::<T>() causes overflow of a signed 64-bit integer.

Examples:
use memflow::types::Pointer64;

let ptr = Pointer64::<u16>::from(0x1000u64);

println!("{:?}", ptr.offset(3));
source

pub fn offset_from(self, origin: Self) -> imem

Calculates the distance between two pointers. The returned value is in units of T: the distance in bytes is divided by mem::size_of::<T>().

This function is the inverse of offset.

Panics

This function panics if T is a Zero-Sized Type (“ZST”).

Examples:
use memflow::types::Pointer64;

let ptr1 = Pointer64::<u16>::from(0x1000u64);
let ptr2 = Pointer64::<u16>::from(0x1008u64);

assert_eq!(ptr2.offset_from(ptr1), 4);
assert_eq!(ptr1.offset_from(ptr2), -4);
source

pub fn add(self, count: umem) -> Self

Calculates the offset from a pointer (convenience for .offset(count as i64)).

count is in units of T; e.g., a count of 3 represents a pointer offset of 3 * size_of::<T>() bytes.

Panics

This function panics if T is a Zero-Sized Type (“ZST”).

Examples

Basic usage:

use memflow::types::Pointer64;

let ptr = Pointer64::<u16>::from(0x1000u64);

println!("{:?}", ptr.add(3));
source

pub fn sub(self, count: umem) -> Self

Calculates the offset from a pointer (convenience for .offset((count as isize).wrapping_neg())).

count is in units of T; e.g., a count of 3 represents a pointer offset of 3 * size_of::<T>() bytes.

Panics

This function panics if T is a Zero-Sized Type (“ZST”).

Examples

Basic usage:

use memflow::types::Pointer64;

let ptr = Pointer64::<u16>::from(0x1000u64);

println!("{:?}", ptr.sub(3));
source§

impl<U: PrimitiveAddress, T: Pod + ?Sized> Pointer<U, T>

Implement special phys/virt read/write for Pod types

source

pub fn read_into<M: MemoryView>( self, mem: &mut M, out: &mut T ) -> PartialResult<()>

source§

impl<U: PrimitiveAddress, T: Pod + Sized> Pointer<U, T>

source

pub fn read<M: MemoryView>(self, mem: &mut M) -> PartialResult<T>

source

pub fn write<M: MemoryView>(self, mem: &mut M, data: &T) -> PartialResult<()>

source§

impl<U: PrimitiveAddress> Pointer<U, ReprCString>

Implement special phys/virt read/write for CReprStr

source§

impl<U: PrimitiveAddress, T> Pointer<U, [T]>

source

pub fn decay(self) -> Pointer<U, T>

source

pub fn at(self, i: umem) -> Pointer<U, T>

Trait Implementations§

source§

impl<U: PrimitiveAddress, T> Add<u64> for Pointer<U, T>

§

type Output = Pointer<U, T>

The resulting type after applying the + operator.
source§

fn add(self, other: umem) -> Pointer<U, T>

Performs the + operation. Read more
source§

impl<U: PrimitiveAddress, T> Add<usize> for Pointer<U, T>

§

type Output = Pointer<U, T>

The resulting type after applying the + operator.
source§

fn add(self, other: usize) -> Pointer<U, T>

Performs the + operation. Read more
source§

impl<U: PrimitiveAddress, T: ?Sized> AsMut<U> for Pointer<U, T>

source§

fn as_mut(&mut self) -> &mut U

Converts this type into a mutable reference of the (usually inferred) input type.
source§

impl<U: PrimitiveAddress, T: ?Sized> AsRef<U> for Pointer<U, T>

source§

fn as_ref(&self) -> &U

Converts this type into a shared reference of the (usually inferred) input type.
source§

impl<U: PrimitiveAddress, T: ?Sized + 'static> ByteSwap for Pointer<U, T>

source§

fn byte_swap(&mut self)

source§

impl<U: PrimitiveAddress, T: ?Sized> Clone for Pointer<U, T>

source§

fn clone(&self) -> Pointer<U, T>

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<U: PrimitiveAddress, T: ?Sized> Debug for Pointer<U, T>

source§

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

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

impl<U: PrimitiveAddress, T: ?Sized> Default for Pointer<U, T>

source§

fn default() -> Pointer<U, T>

Returns the “default value” for a type. Read more
source§

impl<U: PrimitiveAddress, T: ?Sized> Display for Pointer<U, T>

source§

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

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

impl<U: PrimitiveAddress, T: ?Sized> From<Pointer<U, T>> for Address

Converts any Pointer into an Address.

source§

fn from(ptr: Pointer<U, T>) -> Self

Converts to this type from the input type.
source§

impl<U: PrimitiveAddress, T: ?Sized> From<Pointer<U, T>> for PhysicalAddress

source§

fn from(ptr: Pointer<U, T>) -> Self

Converts to this type from the input type.
source§

impl<U: Into<Address>, T: ?Sized> From<Pointer<U, T>> for umem

source§

fn from(ptr: Pointer<U, T>) -> umem

Converts to this type from the input type.
source§

impl<T: ?Sized> From<Pointer<i16, T>> for Address

source§

fn from(ptr: Pointer<i16, T>) -> Self

Converts to this type from the input type.
source§

impl<T: ?Sized> From<Pointer<i16, T>> for PhysicalAddress

source§

fn from(ptr: Pointer<i16, T>) -> Self

Converts to this type from the input type.
source§

impl<T: ?Sized> From<Pointer<i32, T>> for Address

source§

fn from(ptr: Pointer<i32, T>) -> Self

Converts to this type from the input type.
source§

impl<T: ?Sized> From<Pointer<i32, T>> for PhysicalAddress

source§

fn from(ptr: Pointer<i32, T>) -> Self

Converts to this type from the input type.
source§

impl<T: ?Sized> From<Pointer<i64, T>> for Address

source§

fn from(ptr: Pointer<i64, T>) -> Self

Converts to this type from the input type.
source§

impl<T: ?Sized> From<Pointer<i64, T>> for PhysicalAddress

source§

fn from(ptr: Pointer<i64, T>) -> Self

Converts to this type from the input type.
source§

impl<T: ?Sized> From<Pointer<i8, T>> for Address

source§

fn from(ptr: Pointer<i8, T>) -> Self

Converts to this type from the input type.
source§

impl<T: ?Sized> From<Pointer<i8, T>> for PhysicalAddress

source§

fn from(ptr: Pointer<i8, T>) -> Self

Converts to this type from the input type.
source§

impl<T: ?Sized> From<Pointer<u8, T>> for Address

source§

fn from(ptr: Pointer<u8, T>) -> Self

Converts to this type from the input type.
source§

impl<T: ?Sized> From<Pointer<u8, T>> for PhysicalAddress

source§

fn from(ptr: Pointer<u8, T>) -> Self

Converts to this type from the input type.
source§

impl<T: ?Sized> From<Pointer<usize, T>> for Address

source§

fn from(ptr: Pointer<usize, T>) -> Self

Converts to this type from the input type.
source§

impl<T: ?Sized> From<Pointer<usize, T>> for PhysicalAddress

source§

fn from(ptr: Pointer<usize, T>) -> Self

Converts to this type from the input type.
source§

impl<U: PrimitiveAddress, T: ?Sized> From<U> for Pointer<U, T>

source§

fn from(address: U) -> Pointer<U, T>

Converts to this type from the input type.
source§

impl<U: PrimitiveAddress, T: ?Sized> Hash for Pointer<U, T>

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<U: PrimitiveAddress, T: ?Sized> LowerHex for Pointer<U, T>

source§

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

Formats the value using the given formatter.
source§

impl<U: PrimitiveAddress, T: ?Sized> Ord for Pointer<U, T>

source§

fn cmp(&self, rhs: &Pointer<U, T>) -> Ordering

This method returns an Ordering between self and other. Read more
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 + PartialOrd,

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

impl<U: PrimitiveAddress, T: ?Sized> PartialEq for Pointer<U, T>

source§

fn eq(&self, rhs: &Pointer<U, T>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<U: PrimitiveAddress, T: ?Sized> PartialOrd for Pointer<U, T>

source§

fn partial_cmp(&self, rhs: &Pointer<U, T>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

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

This method 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

This method 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

This method 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

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl<U, T: ?Sized> Serialize for Pointer<U, T>
where U: Serialize + Sized,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<U: PrimitiveAddress, T> Sub<u64> for Pointer<U, T>

§

type Output = Pointer<U, T>

The resulting type after applying the - operator.
source§

fn sub(self, other: umem) -> Pointer<U, T>

Performs the - operation. Read more
source§

impl<U: PrimitiveAddress, T> Sub<usize> for Pointer<U, T>

§

type Output = Pointer<U, T>

The resulting type after applying the - operator.
source§

fn sub(self, other: usize) -> Pointer<U, T>

Performs the - operation. Read more
source§

impl<U: PrimitiveAddress, T: ?Sized> UpperHex for Pointer<U, T>

source§

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

Formats the value using the given formatter.
source§

impl<U: PrimitiveAddress, T: ?Sized> Copy for Pointer<U, T>

source§

impl<U: PrimitiveAddress, T: ?Sized> Eq for Pointer<U, T>

source§

impl<U: Pod, T: ?Sized + 'static> Pod for Pointer<U, T>

Auto Trait Implementations§

§

impl<U, T: ?Sized> RefUnwindSafe for Pointer<U, T>
where U: RefUnwindSafe,

§

impl<U, T: ?Sized> Send for Pointer<U, T>
where U: Send,

§

impl<U, T: ?Sized> Sync for Pointer<U, T>
where U: Sync,

§

impl<U, T: ?Sized> Unpin for Pointer<U, T>
where U: Unpin,

§

impl<U, T: ?Sized> UnwindSafe for Pointer<U, T>
where U: UnwindSafe,

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<'a, T> BorrowOwned<'a> for T
where T: 'a + Clone,

§

type ROwned = T

The owned type, stored in RCow::Owned
§

type RBorrowed = &'a T

The borrowed type, stored in RCow::Borrowed
source§

fn r_borrow( this: &'a <T as BorrowOwned<'a>>::ROwned ) -> <T as BorrowOwned<'a>>::RBorrowed

source§

fn r_to_owned( this: <T as BorrowOwned<'a>>::RBorrowed ) -> <T as BorrowOwned<'a>>::ROwned

source§

fn deref_borrowed(this: &<T as BorrowOwned<'a>>::RBorrowed) -> &T

source§

fn deref_owned(this: &<T as BorrowOwned<'a>>::ROwned) -> &T

source§

fn from_cow_borrow(this: &'a T) -> <T as BorrowOwned<'a>>::RBorrowed

source§

fn from_cow_owned(this: <T as ToOwned>::Owned) -> <T as BorrowOwned<'a>>::ROwned

source§

fn into_cow_borrow(this: <T as BorrowOwned<'a>>::RBorrowed) -> &'a T

source§

fn into_cow_owned(this: <T as BorrowOwned<'a>>::ROwned) -> <T as ToOwned>::Owned

§

impl<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, F> From2<T> for F
where T: Into<F>,

source§

fn from2(other: T) -> F

source§

impl<T> GetWithMetadata for T

§

type ForSelf = WithMetadata_<T, T>

This is always WithMetadata_<Self, Self>
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> PodMethods for T
where T: Pod + ?Sized,

source§

fn zeroed() -> T

Returns a zero-initialized instance of the type.
source§

fn as_bytes(&self) -> &[u8]

Returns the object’s memory as a byte slice.
source§

fn as_bytes_mut(&mut self) -> &mut [u8]

Returns the object’s memory as a mutable byte slice.
source§

fn as_data_view(&self) -> &DataView

Returns a data view into the object’s memory.
source§

fn as_data_view_mut(&mut self) -> &mut DataView

Returns a mutable data view into the object’s memory.
§

impl<S> ROExtAcc for S

§

fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F

Gets a reference to a field, determined by offset. Read more
§

fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F

Gets a muatble reference to a field, determined by offset. Read more
§

fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F

Gets a const pointer to a field, the field is determined by offset. Read more
§

fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F

Gets a mutable pointer to a field, determined by offset. Read more
§

impl<S> ROExtOps<Aligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F

Replaces a field (determined by offset) with value, returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> F
where F: Copy,

Gets a copy of a field (determined by offset). The field is determined by offset. Read more
§

impl<S> ROExtOps<Unaligned> for S

§

fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F

Replaces a field (determined by offset) with value, returning the previous value of the field. Read more
§

fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)

Swaps a field (determined by offset) with the same field in right. Read more
§

fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> F
where F: Copy,

Gets a copy of a field (determined by offset). The field is determined by offset. Read more
§

impl<T> SelfOps for T
where T: ?Sized,

§

fn eq_id(&self, other: &Self) -> bool

Compares the address of self with the address of other. Read more
§

fn piped<F, U>(self, f: F) -> U
where F: FnOnce(Self) -> U, Self: Sized,

Emulates the pipeline operator, allowing method syntax in more places. Read more
§

fn piped_ref<'a, F, U>(&'a self, f: F) -> U
where F: FnOnce(&'a Self) -> U,

The same as piped except that the function takes &Self Useful for functions that take &Self instead of Self. Read more
§

fn piped_mut<'a, F, U>(&'a mut self, f: F) -> U
where F: FnOnce(&'a mut Self) -> U,

The same as piped, except that the function takes &mut Self. Useful for functions that take &mut Self instead of Self.
§

fn mutated<F>(self, f: F) -> Self
where F: FnOnce(&mut Self), Self: Sized,

Mutates self using a closure taking self by mutable reference, passing it along the method chain. Read more
§

fn observe<F>(self, f: F) -> Self
where F: FnOnce(&Self), Self: Sized,

Observes the value of self, passing it along unmodified. Useful in long method chains. Read more
§

fn into_<T>(self) -> T
where Self: Into<T>,

Performs a conversion with Into. using the turbofish .into_::<_>() syntax. Read more
§

fn as_ref_<T>(&self) -> &T
where Self: AsRef<T>, T: ?Sized,

Performs a reference to reference conversion with AsRef, using the turbofish .as_ref_::<_>() syntax. Read more
§

fn as_mut_<T>(&mut self) -> &mut T
where Self: AsMut<T>, T: ?Sized,

Performs a mutable reference to mutable reference conversion with AsMut, using the turbofish .as_mut_::<_>() syntax. Read more
§

fn drop_(self)
where Self: Sized,

Drops self using method notation. Alternative to std::mem::drop. Read more
source§

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

§

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> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<This> TransmuteElement for This
where This: ?Sized,

source§

unsafe fn transmute_element<T>(self) -> Self::TransmutedPtr
where Self: CanTransmuteElement<T>,

Transmutes the element type of this pointer.. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

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

§

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

impl<T> TypeIdentity for T
where T: ?Sized,

§

type Type = T

This is always Self.
§

fn into_type(self) -> Self::Type
where Self: Sized, Self::Type: Sized,

Converts a value back to the original type.
§

fn as_type(&self) -> &Self::Type

Converts a reference back to the original type.
§

fn as_type_mut(&mut self) -> &mut Self::Type

Converts a mutable reference back to the original type.
§

fn into_type_box(self: Box<Self>) -> Box<Self::Type>

Converts a box back to the original type.
§

fn into_type_arc(this: Arc<Self>) -> Arc<Self::Type>

Converts an Arc back to the original type. Read more
§

fn into_type_rc(this: Rc<Self>) -> Rc<Self::Type>

Converts an Rc back to the original type. Read more
§

fn from_type(this: Self::Type) -> Self
where Self: Sized, Self::Type: Sized,

Converts a value back to the original type.
§

fn from_type_ref(this: &Self::Type) -> &Self

Converts a reference back to the original type.
§

fn from_type_mut(this: &mut Self::Type) -> &mut Self

Converts a mutable reference back to the original type.
§

fn from_type_box(this: Box<Self::Type>) -> Box<Self>

Converts a box back to the original type.
§

fn from_type_arc(this: Arc<Self::Type>) -> Arc<Self>

Converts an Arc back to the original type.
§

fn from_type_rc(this: Rc<Self::Type>) -> Rc<Self>

Converts an Rc back to the original type.
source§

impl<This> ValidTag_Bounds for This
where This: Debug + Clone + PartialEq,