#lifetime #reference #map #scope

ctxmap

一个可以存储不同类型和生命周期的引用的集合

3个版本 (破坏性更新)

0.5.0 2022年6月16日
0.4.0 2022年5月31日
0.3.0 2022年5月27日
0.2.0 2022年4月4日
0.1.0 2021年9月20日

#1201 in 数据结构

MIT/Apache

20KB
371

ctxmap

Crates.io Docs.rs Actions Status

一个可以存储不同类型和生命周期的引用的集合。

安装

将此添加到您的 Cargo.toml 中

[dependencies]
ctxmap = "0.5.0"

示例

ctxmap::schema!(Schema);
ctxmap::key!(Schema {
    KEY_NO_DEFAULT: u32,
    KEY_INT: u32 = 10,
    KEY_DYN: dyn std::fmt::Display = 10,
    KEY_STR: str = "abc",
    KEY_STRING: str = format!("abc-{}", 10),
    mut KEY_MUT: u32 = 30,
});

let mut m = ctxmap::CtxMap::new();
assert_eq!(m.get(&KEY_NO_DEFAULT), None);
assert_eq!(m.get(&KEY_INT), Some(&10));
assert_eq!(m[&KEY_INT], 10);
assert_eq!(&m[&KEY_STR], "abc");

m.with(&KEY_INT, &20, |m| {
    assert_eq!(m[&KEY_INT], 20);
});
assert_eq!(m[&KEY_INT], 10);

assert_eq!(m[&KEY_MUT], 30);
m[&KEY_MUT] = 40;
assert_eq!(m[&KEY_MUT], 40);

m.with_mut(&KEY_MUT, &mut 50, |m| {
    assert_eq!(m[&KEY_MUT], 50);
    m[&KEY_MUT] = 60;
    assert_eq!(m[&KEY_MUT], 60);
});
assert_eq!(m[&KEY_MUT], 40);

许可证

此项目由 Apache-2.0/MIT 双重许可。有关详细信息,请参阅两个 LICENSE-* 文件。

贡献

除非您明确表示,否则根据 Apache-2.0 许可证定义,您有意提交的任何贡献,均应如上所述双重许可,而无需任何额外的条款或条件。

依赖关系

~49KB