#dst #init #sized #dynamic #ways #debugging #emplace

nightly dst-init

为 Rust 提供嵌入动态大小类型的库

3 个版本 (破坏性更新)

0.4.0 2023年7月1日
0.3.0 2023年4月12日
0.2.0 2023年4月12日
0.1.1 2023年4月12日
0.1.0 2023年4月12日

#443 in 内存管理

每月32次下载

自定义许可

19KB
436 代码行

dst-init

为 Rust 提供嵌入动态大小类型的库

#![feature(alloc_layout_extra)]
#![feature(ptr_metadata)]

use dst_init_macros::dst;
use dst_init::{BoxExt, Slice, SliceExt};
#[dst]
#[derive(Debug)]
struct Test<A, B, C, D> {
    a: A,
    b: B,
    c: C,
    dst: [(C, D)],
}

#[dst]
#[derive(Debug)]
struct Test1<A, B, C, D> {
    a: usize,
    t: Test<A, B, C, D>,
}

let t = TestInit {
    a: 1usize,
    b: 1u8,
    c: 1u8,
    dst: Slice::iter_init(3, (0..).map(|i| (i as u8, i as usize))),
};
let u = Test1Init { a: 1usize, t };
let a = Box::emplace(u);
assert_eq!(a.a,1usize);
assert_eq!(a.t.a,1);
assert_eq!(a.t.b,1);
assert_eq!(a.t.c,1);
assert_eq!(a.t.dst,[(0,0),(1,1),(2,2)]);


lib.rs:

为 Rust 提供嵌入动态大小类型的库

#![feature(alloc_layout_extra)]
#![feature(ptr_metadata)]

use dst_init_macros::dst;
use dst_init::{BoxExt, Slice, SliceExt};
#[dst]
#[derive(Debug)]
struct Test<A, B, C, D> {
    a: A,
    b: B,
    c: C,
    dst: [(C, D)],
}

#[dst]
#[derive(Debug)]
struct Test1<A, B, C, D> {
    a: usize,
    t: Test<A, B, C, D>,
}

let t = TestInit {
    a: 1usize,
    b: 1u8,
    c: 1u8,
    dst: Slice::iter_init(3, (0..).map(|i| (i as u8, i as usize))),
};
let u = Test1Init { a: 1usize, t };
let a = Box::emplace(u);
assert_eq!(a.a,1usize);
assert_eq!(a.t.a,1);
assert_eq!(a.t.b,1);
assert_eq!(a.t.c,1);
assert_eq!(a.t.dst,[(0,0),(1,1),(2,2)]);

依赖项

~2MB
~44K SLoC