3 个不稳定版本
0.6.1 | 2024年7月5日 |
---|---|
0.6.0 | 2024年7月5日 |
0.5.1 | 2024年6月28日 |
#1225 在 数据结构
56KB
1K SLoC
rocstr
RocStr
概述
Rust OuiCloud Str
不可变固定容量栈基于泛型拷贝字符串。
RocStr 是一个由固定大小数组支持的字符串。
它跟踪其长度,并使用 SIZE 作为最大容量进行参数化。
SIZE 是 usize 类型,但其范围限制为 u32::MAX;尝试创建具有更大容量的 RocStr 将引发恐慌。
用法
基本用法
cargo install rocstr
pub struct Customer {
id: u32,
first_name: RocStr<64>,
last_name: RocStr<64>,
}
let alice = Customer {id: 1, first_name: "Alice".into(), last_name: "Adams".into()};
let bob = Customer {id: 2, first_name: "Bob".into(), last_name: "Bennett".into()};
let alice_name = alice.first_name + " " + alice.last_name;
let bob_name = bob.first_name + " " + bob.last_name;
assert_eq!(alice_name, "Alice Adams");
assert_eq!(bob_name, "Bob Bennett");
动机
另一个 Rust 的拷贝字符串类型。
但,这个特别设计用来简化异步编程
- 它是拥有的,这意味着没有生命周期管理,与 Rust 标准的
&str
不同 - 它实现了
Copy
特性,与 Rust 标准的String
不同,这意味着快速且隐式的拷贝 - 它公开了一个不可变 API,没有内部可变性,这意味着线程安全
此外,它被设计用于覆盖全栈 Web 编程范围,从功能齐全的后端服务器到 WASM 前端。
库 | 拥有的 | 实现 Copy | 不可变 API | 无 std | 无不安全 | 注意 |
---|---|---|---|---|---|---|
core::str | ❌ | ❌ | ❌ | ✅ | ➖ | 核心不可变字符串 |
std::String | ✅ | ❌ | ❌ | ❌ | ➖ | 标准字符串 |
imstr::ImString | ✅ | ❌ | ❌ | ❌ | ❌ | 使用 Arc<String> 作为底层 |
smol_str::SmolStr | ✅ | ❌ | ❌ | ✅ | ❌ | rust-analyzer 字符串 |
bytestring::ByteString | ✅ | ❌ | ❌ | ✅ | ❌ | actix 字符串 |
flexstr::FlexStr | ✅ | ❌ | ❌ | ✅ | ❌ | |
copstr::Str | ✅ | ✅ | ❌ | ❌ | ❌ | |
copystr::sXX | ✅ | ✅ | ❌ | ❌ | ✅ | 在 const generic 之前的旧实现 |
arraystring::ArrayString | ✅ | ✅ | ❌ | ✅ | ❌ | 在 const generic 之前的旧实现 |
tinystr::TinyAsciiStr | ✅ | ✅ | ❌ | ✅ | ❌ | 仅 ASCII |
arrayvec::ArrayString | ✅ | ✅ | ❌ | ✅ | ❌ | 不幸的是,它使用不安全 |
rocstr::RocStr | ✅ | ✅ | ✅ | ✅ | ✅ | 这个包 |
用例
目标是全栈 Web 编程
- 将具有固定大小的数据库字符串映射(char(SIZE),varchar(SIZE) 等…)
- 简化异步函数式编程(拥有,实现 Copy,不可变性)
支持的 Rust 版本
当前的最小支持 Rust 版本 (MSRV) 为 1.60。
安全性
此包使用 #![forbid(unsafe_code)]
确保所有内容都在 100% 安全 Rust 中实现。
包功能
默认情况下,RocStr 包含以下功能:
- std 启用了依赖于 std 库的功能
可选地,以下依赖可以被启用:
- serde 启用了 serde 序列化/反序列化支持
- postgres 启用了 PostgreSql 类型支持
RocStr 支持无_std 模式(通过 default-features = false 启用)
许可证
RocStr 在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发。
请参阅 LICENSE-APACHE、LICENSE-MIT 和 COPYRIGHT 以获取详细信息。
依赖项
~0–700KB
~17K SLoC