Crate rocstr

Source
Expand description

§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

#[derive(Copy, Clone)]
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 standard String, 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.

Libraryownedimpl Copyimmut. APIno stdno unsafeNote
core::strcore immutable string
std::Stringstd string
imstr::ImStringuse Arc<String> under the hood
smol_str::SmolStrrust-analyzer string
bytestring::ByteStringactix string
flexstr::FlexStr
copstr::Str
copystr::sXXold impl before const generic
arraystring::ArrayStringold impl before const generic
tinystr::TinyAsciiStrascii only
arrayvec::ArrayStringunfortunately, it uses unsafe
rocstr::RocStrthis 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.

Re-exports§

pub use crate::rocerr::InsufficientCapacity;
pub use crate::rocstr::RocStr;

Modules§

postgres
Postgres type implementation
rocerr
RocStr errors type : insufficient capacity error type used with try_... functions
rocstr
An immutable fixed capacity stack based generic copy string.
serialize
Serde Serialize and Deserialize implementation