#string #immutability #stack #fixed-size #thread-safety #no-std

no-std rocstr

不可变固定容量栈基于泛型拷贝字符串

3 个不稳定版本

0.6.1 2024年7月5日
0.6.0 2024年7月5日
0.5.1 2024年6月28日

#1225数据结构

MIT/Apache

56KB
1K SLoC

rocstr

Maintenance: actively-developed Rust: ^1.60 crates.io docs.rs GitHub Actions: Security Audit GitHub Actions: Unit Tests Codecov

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