#封装 #特质 #

wrappr

一些有用封装特质的库

4 个稳定版本

1.2.0 2024年3月25日
1.1.1 2024年3月23日
1.0.0 2024年3月23日

#754Rust 模式

Download history 343/week @ 2024-03-19 42/week @ 2024-03-26 39/week @ 2024-04-02

每月 139 下载

MIT 许可证

12KB
214

Wrappr

wrappr 是一个包含一些有用封装特质的库

以下为 4 组特质

  • a wrapper 是一个低成本的封装器,它构建一个新的泛型输入类型的类型
  • a composer 是一个可能昂贵的操作,它接受一个泛型输入类型,并在其中组合它
  • a injectable 是封装器的语义相反,它是自动实现的,只是对象和泛型交换了位置
  • a embedable 是组合器的语义相反,它是自动实现的,只是对象和泛型交换了位置

示例

封装器

let x: u8 = 1;
let y: u8 = 2;
let z: Vec<u8> = vec![3, 4];

let yz: Vec<u8> = y.wrap(z);
assert_eq!(yz, vec![2, 3, 4]);

let xyz: Vec<u8> = x.wrap(yz);
assert_eq!(xyz, vec![1, 2, 3, 4]);

组合器

let mut x: Vec<u8> = vec![1, 2];
let y: Vec<u8> = vec![3, 4];
let z: u8 = 5;

x.compose(y);
assert_eq!(x, vec![1, 2, 3, 4]);

x.compose(z);
assert_eq!(x, vec![1, 2, 3, 4, 5]);

可注入的

let x: u8 = 1;
let y: u8 = 2;
let z: Vec<u8> = vec![3, 4];

let yz: Vec<u8> = z.inject(y);
assert_eq!(yz, vec![2, 3, 4]);

let xyz: Vec<u8> = yz.inject(x);
assert_eq!(xyz, vec![1, 2, 3, 4]);

可嵌入的

let mut x: Vec<u8> = vec![1, 2];
let y: Vec<u8> = vec![3, 4];
let z: u8 = 5;

y.embed(&mut x);
assert_eq!(x, vec![1, 2, 3, 4]);

z.embed(&mut x);
assert_eq!(x, vec![1, 2, 3, 4, 5]);

无运行时依赖