gstr

Crates.iogstr
lib.rsgstr
version0.2.0
sourcesrc
created_at2024-09-09 11:11:10.391993
updated_at2024-10-12 14:55:59.798778
descriptionAn immutable string implementation optimized for small strings and comparison.
homepagehttps://github.com/orzogc/gstr
repositoryhttps://github.com/orzogc/gstr
max_upload_size
id1369162
size161,407
orzogc (orzogc)

documentation

README

gstr

GStr

GStr is an immutable string implementation optimized for small strings and comparison.

The size of GStr or Option<GStr> is guaranteed to be 16 bytes on 64-bit platforms or 12 bytes on 32-bit platforms.

The first 4 bytes of the string buffer are inlined in GStr, so comparing two GStrs is faster than comparing two strs in most cases.

The maximum length of GStr is i32::MAX.

SharedGStr

SharedGStr is similar to GStr, but using the atomic reference counting internally, so cloning a SharedGStr only takes O(1) time.

The maximum length of SharedGStr is i32::MAX on 64-bit platforms or i32::MAX - 7 on 32-bit platforms.

Usage

use gstr::GStr;

// This clones the string into the heap memory.
let gstr = GStr::new("Hello, World!");
assert_eq!(gstr, "Hello, World!");

// `GStr` can be constructed from a static string in const context without allocating memory.
let gstr = const { GStr::from_static("Hello, Rust!") };
assert_eq!(gstr, "Hello, Rust!");

// `GStr` can be converted from `String` without allocating memory.
let gstr = GStr::from_string(String::from("Hello, 🦀 and 🌎!"));
assert_eq!(gstr, "Hello, 🦀 and 🌎!");

Features

gstr supports no_std, but needs the alloc crate to work.

gstr has the following features:

  • std: Enable support for some types in std. It's enabled by default.
  • serde: Enable serialization and deserialization support for serde.
  • rkyv: Enable serialization and deserialization support for rkyv.

Warnings

gstr is not tested on big-endian platforms, but it maybe works fine on them.

Commit count: 18

cargo fmt