6 个版本
0.0.6 | 2020年9月21日 |
---|---|
0.0.5 | 2020年9月10日 |
0.0.2 | 2020年8月26日 |
#2071 在 数据结构
每月下载量 97 次
在 8 个crate中使用 (5 个直接使用)
18KB
196 行
cervine
一个稍微灵活的写时克隆智能指针;大致相当于 T: Borrow<R>
对 alloc::borrow::Cow
对 B: ToOwned
的关系。
所有者和引用类型可以独立选择,这意味着例如 smartstring 的 String
可以在所有者变体中使用,而不是 alloc
的。
Serde 支持是可选的,通过 "serde"
功能和 no_std
兼容。
请注意,当前反序列化始终通过值进行,并且 serde::Serialize
只在引用类型上查找。这可能在主要版本升级中发生变化,很可能是在 专业化 可用之后。
安装
请使用 cargo-edit 来始终添加此库的最新版本
cargo add cervine
示例
相同类型 (T = R = [bool; 2]
)
use cervine::Cow;
use rand::prelude::*;
use std::borrow::Borrow as _;
let data = [true, false];
let mut cow = Cow::Borrowed(&data);
if thread_rng().gen() {
cow = Cow::Owned([false, true]);
}
let array_ref: &[bool; 2] = cow.borrow();
不同类型 (T = String
和 R = str
)
use cervine::Cow;
use rand::prelude::*;
use smartstring::alias::String;
let mut cow = Cow::Borrowed("borrowed");
if thread_rng().gen() {
cow = Cow::Owned(String::from("owned"));
}
let str_ref: &str = cow.as_ref();
许可证
许可协议为以下之一
- Apache许可证,版本2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则您有意提交以供包含在作品中的任何贡献(根据Apache-2.0许可证定义),应按上述方式双重许可,不得有任何额外的条款或条件。
行为准则
变更日志
版本控制
cervine
严格遵循语义版本控制2.0.0,以下为例外
- 在主版本更改时,次要版本不会重置为0(除v1外)。
将其视为全局功能级别。 - 在主版本或次要版本更改时,修补版本不会重置为0(除v0.1和v1外)。
将其视为全局修补级别。
这包括上述指定的Rust版本要求。
早期Rust版本可能兼容,但这可能随着次要版本或修补版本的发布而变化。
受功能和修补影响的版本可以通过CHANGELOG.md中的相应标题来确定。
依赖项
~180KB