3 unstable releases
0.6.1 | Jul 5, 2024 |
---|---|
0.6.0 | Jul 5, 2024 |
0.5.1 | Jun 28, 2024 |
#1293 in Data structures
101 downloads per month
56KB
1K
SLoC
rocstr
RocStr
Overview
Rust OuiCloud Str
An immutable fixed capacity stack based generic copy string.
The RocStr is a string backed by a fixed size array.
It keeps track of its length, and is parameterized by SIZE for the maximum capacity.
SIZE is of type usize but is range limited to u32::MAX; attempting to create RocStr with larger capacity will panic.
Usage
Basic usage
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");
Motivation
Yet another copy string type for Rust.
But, this one is particularly shaped to ease async programming :
- it is owned which means no lifetime management, unlike Rust standard
&str
- it implements
Copy
trait, unlike Rust standardString
, which means fast and implicit copy - it exposed an immutable API, no interior mutability, which means thread safety
More over, it was designed to cover web full stack programming range, from full featured back-end server to WASM front-end.
Library | owned | impl Copy | immut. API | no std | no unsafe | Note |
---|---|---|---|---|---|---|
core::str | ❌ | ❌ | ❌ | ✅ | ➖ | core immutable string |
std::String | ✅ | ❌ | ❌ | ❌ | ➖ | std string |
imstr::ImString | ✅ | ❌ | ❌ | ❌ | ❌ | use Arc<String> under the hood |
smol_str::SmolStr | ✅ | ❌ | ❌ | ✅ | ❌ | rust-analyzer string |
bytestring::ByteString | ✅ | ❌ | ❌ | ✅ | ❌ | actix string |
flexstr::FlexStr | ✅ | ❌ | ❌ | ✅ | ❌ | |
copstr::Str | ✅ | ✅ | ❌ | ❌ | ❌ | |
copystr::sXX | ✅ | ✅ | ❌ | ❌ | ✅ | old impl before const generic |
arraystring::ArrayString | ✅ | ✅ | ❌ | ✅ | ❌ | old impl before const generic |
tinystr::TinyAsciiStr | ✅ | ✅ | ❌ | ✅ | ❌ | ascii only |
arrayvec::ArrayString | ✅ | ✅ | ❌ | ✅ | ❌ | unfortunately, it uses unsafe |
rocstr::RocStr | ✅ | ✅ | ✅ | ✅ | ✅ | this crate |
Use cases
The target use case is web full stack programming :
- mapping database strings with bound size (char(SIZE), varchar(SIZE), etc…)
- easing async functional programming (owned, impl Copy, immutability)
Supported Rust Versions
The current MSRV is 1.60.
Safety
This crate uses #![forbid(unsafe_code)]
to ensure everything is implemented in 100% Safe Rust.
Crate Features
RocStr is built with these features enabled by default:
- std enables functionality dependent on the std lib
Optionally, the following dependencies can be enabled:
- serde enables serde Serialize/Deserialize support
- postgres enables PostgreSql type support
RocStr supports no_std mode (enabled via default-features = false)
License
RocStr is distributed under the terms of both the MIT license and the Apache License (Version 2.0).
See LICENSE-APACHE and LICENSE-MIT, and COPYRIGHT for details.
Dependencies
~0–700KB
~17K SLoC