Skip to main content

Project

Trait Project 

Source
pub unsafe trait Project<Src: ?Sized, Dst: ?Sized> {
    // Required method
    fn project(src: PtrInner<'_, Src>) -> *mut Dst;
}
Expand description

A pointer cast or projection.

§Safety

The implementation of project must satisfy its safety post-condition.

Required Methods§

Source

fn project(src: PtrInner<'_, Src>) -> *mut Dst

Projects a pointer from Src to Dst.

Users should generally not call project directly, and instead should use high-level APIs like [PtrInner::project] or Ptr::project.

§Safety

The returned pointer refers to a non-strict subset of the bytes of src’s referent, and has the same provenance as src.

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.

Implementors§

Source§

impl<Src, Dst> Project<Src, Dst> for CastSized

Source§

impl<Src, Dst> Project<Src, Dst> for CastSizedExact

Source§

impl<Src, Dst> Project<Src, Dst> for CastUnsized
where Src: ?Sized + KnownLayout, Dst: ?Sized + KnownLayout<PointerMetadata = Src::PointerMetadata>,

Source§

impl<T, F, const VARIANT_ID: i128, const FIELD_ID: i128> Project<T, <T as HasField<F, VARIANT_ID, FIELD_ID>>::Type> for Projection<F, VARIANT_ID, FIELD_ID>
where T: HasField<F, VARIANT_ID, FIELD_ID> + ?Sized,

Source§

impl<T, U, V, TU, UV> Project<T, V> for TransitiveProject<U, TU, UV>
where T: ?Sized, U: ?Sized, V: ?Sized, TU: Project<T, U>, UV: Project<U, V>,

Source§

impl<T: ?Sized + KnownLayout> Project<T, [u8]> for AsBytesCast

Source§

impl<T: ?Sized> Project<T, ()> for CastToUnit

Source§

impl<T: ?Sized> Project<T, T> for IdCast