#cow #smart-pointers #serde #borrow #no-std

no-std cervine

略为灵活的 Cow;大致相当于 alloc::borrow::Cow 对 B: ToOwned 的关系。

6 个版本

0.0.6 2020年9月21日
0.0.5 2020年9月10日
0.0.2 2020年8月26日

#2071数据结构

Download history 38/week @ 2024-03-11 28/week @ 2024-03-18 30/week @ 2024-03-25 58/week @ 2024-04-01 75/week @ 2024-04-08 31/week @ 2024-04-15 30/week @ 2024-04-22 27/week @ 2024-04-29 20/week @ 2024-05-06 38/week @ 2024-05-13 22/week @ 2024-05-20 28/week @ 2024-05-27 26/week @ 2024-06-03 21/week @ 2024-06-10 20/week @ 2024-06-17 26/week @ 2024-06-24

每月下载量 97 次
8 个crate中使用 (5 个直接使用)

MIT/Apache

18KB
196

cervine

Lib.rs Crates.io Docs.rs

Rust 1.42.0 Build Status Crates.io - License

GitHub open issues open pull requests crev reviews

一个稍微灵活的写时克隆智能指针;大致相当于 T: Borrow<R>alloc::borrow::CowB: ToOwned 的关系。

所有者和引用类型可以独立选择,这意味着例如 smartstringString 可以在所有者变体中使用,而不是 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 = StringR = 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许可证定义),应按上述方式双重许可,不得有任何额外的条款或条件。

行为准则

变更日志

版本控制

cervine严格遵循语义版本控制2.0.0,以下为例外

  • 在主版本更改时,次要版本不会重置为0(除v1外)。
    将其视为全局功能级别。
  • 在主版本或次要版本更改时,修补版本不会重置为0(除v0.1和v1外)。
    将其视为全局修补级别。

这包括上述指定的Rust版本要求。
早期Rust版本可能兼容,但这可能随着次要版本或修补版本的发布而变化。

受功能和修补影响的版本可以通过CHANGELOG.md中的相应标题来确定。

依赖项

~180KB