Skip to main content

CopyInto

Trait CopyInto 

Source
pub trait CopyInto {
    type Output<'arena>: 'arena;

    // Required method
    fn copy_into<'arena, A>(&self, arena: &'arena A) -> Self::Output<'arena>
       where A: Arena;
}
Expand description

A deep copy of a value into an arena, rebinding every internal reference.

Implementors copy all of their arena-resident data (byte slices, nested references, slices of children) into the given arena, so the output is self-contained: it stays valid after the arena the input lived in is dropped or reset.

use mago_allocator::prelude::*;

struct Name<'arena> {
    value: &'arena [u8],
}

impl CopyInto for Name<'_> {
    type Output<'arena> = Name<'arena>;

    fn copy_into<'arena, A>(&self, arena: &'arena A) -> Self::Output<'arena>
    where
        A: Arena,
    {
        Name { value: arena.alloc_slice_copy(self.value) }
    }
}

let source = LocalArena::new();
let target = LocalArena::new();

let name = Name { value: source.alloc_slice_copy(b"App\\Collection") };
let copied = name.copy_into(&target);
drop(source);

assert_eq!(copied.value, b"App\\Collection");

Required Associated Types§

Source

type Output<'arena>: 'arena

Required Methods§

Source

fn copy_into<'arena, A>(&self, arena: &'arena A) -> Self::Output<'arena>
where A: Arena,

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl CopyInto for ()

Source§

type Output<'arena> = ()

Source§

fn copy_into<'arena, A>(&self, _arena: &'arena A) -> Self::Output<'arena>
where A: Arena,

Source§

impl CopyInto for bool

Source§

type Output<'arena> = bool

Source§

fn copy_into<'arena, A>(&self, _arena: &'arena A) -> Self::Output<'arena>
where A: Arena,

Source§

impl CopyInto for f32

Source§

type Output<'arena> = f32

Source§

fn copy_into<'arena, A>(&self, _arena: &'arena A) -> Self::Output<'arena>
where A: Arena,

Source§

impl CopyInto for f64

Source§

type Output<'arena> = f64

Source§

fn copy_into<'arena, A>(&self, _arena: &'arena A) -> Self::Output<'arena>
where A: Arena,

Source§

impl CopyInto for i8

Source§

type Output<'arena> = i8

Source§

fn copy_into<'arena, A>(&self, _arena: &'arena A) -> Self::Output<'arena>
where A: Arena,

Source§

impl CopyInto for i16

Source§

type Output<'arena> = i16

Source§

fn copy_into<'arena, A>(&self, _arena: &'arena A) -> Self::Output<'arena>
where A: Arena,

Source§

impl CopyInto for i32

Source§

type Output<'arena> = i32

Source§

fn copy_into<'arena, A>(&self, _arena: &'arena A) -> Self::Output<'arena>
where A: Arena,

Source§

impl CopyInto for i64

Source§

type Output<'arena> = i64

Source§

fn copy_into<'arena, A>(&self, _arena: &'arena A) -> Self::Output<'arena>
where A: Arena,

Source§

impl CopyInto for isize

Source§

type Output<'arena> = isize

Source§

fn copy_into<'arena, A>(&self, _arena: &'arena A) -> Self::Output<'arena>
where A: Arena,

Source§

impl CopyInto for u8

Source§

type Output<'arena> = u8

Source§

fn copy_into<'arena, A>(&self, _arena: &'arena A) -> Self::Output<'arena>
where A: Arena,

Source§

impl CopyInto for u16

Source§

type Output<'arena> = u16

Source§

fn copy_into<'arena, A>(&self, _arena: &'arena A) -> Self::Output<'arena>
where A: Arena,

Source§

impl CopyInto for u32

Source§

type Output<'arena> = u32

Source§

fn copy_into<'arena, A>(&self, _arena: &'arena A) -> Self::Output<'arena>
where A: Arena,

Source§

impl CopyInto for u64

Source§

type Output<'arena> = u64

Source§

fn copy_into<'arena, A>(&self, _arena: &'arena A) -> Self::Output<'arena>
where A: Arena,

Source§

impl CopyInto for usize

Source§

type Output<'arena> = usize

Source§

fn copy_into<'arena, A>(&self, _arena: &'arena A) -> Self::Output<'arena>
where A: Arena,

Implementors§