rust-analyzer/lib/smol_str
2024-01-31 18:59:27 +01:00
..
.github fix no_std support 2021-11-01 16:04:40 +03:00
src reformat 2024-01-31 18:59:27 +01:00
tests Add Writer and ToSmolStr 2024-01-16 09:18:52 +01:00
.gitignore Switch CI to actions 2020-09-20 09:54:54 +02:00
bors.toml Switch CI to actions 2020-09-20 09:54:54 +02:00
Cargo.toml Publish 0.2.1 2024-01-16 10:58:18 +01:00
LICENSE-APACHE initial 2018-08-16 23:32:49 +03:00
LICENSE-MIT initial 2018-08-16 23:32:49 +03:00
README.md feat: Add SmolStr::from_static 2024-01-11 15:45:38 +01:00

smol_str

CI Crates.io API reference

A SmolStr is a string type that has the following properties:

  • size_of::<SmolStr>() == 24 (therefore == size_of::<String>() on 64 bit platforms)
  • Clone is O(1)
  • Strings are stack-allocated if they are:
    • Up to 23 bytes long
    • Longer than 23 bytes, but substrings of WS (see src/lib.rs). Such strings consist solely of consecutive newlines, followed by consecutive spaces
  • If a string does not satisfy the aforementioned conditions, it is heap-allocated
  • Additionally, a SmolStr can be explicitly created from a &'static str without allocation

Unlike String, however, SmolStr is immutable. The primary use case for SmolStr is a good enough default storage for tokens of typical programming languages. Strings consisting of a series of newlines, followed by a series of whitespace are a typical pattern in computer programs because of indentation. Note that a specialized interner might be a better solution for some use cases.

MSRV Policy

Minimal Supported Rust Version: latest stable.

Bumping MSRV is not considered a semver-breaking change.