27 releases

new 0.2.2 May 14, 2024
0.2.1 Jan 16, 2024
0.2.0 Apr 11, 2023
0.1.25 Mar 30, 2023
0.1.7 Oct 13, 2018

#25 in Rust patterns

Download history 193130/week @ 2024-01-26 195693/week @ 2024-02-02 207007/week @ 2024-02-09 203419/week @ 2024-02-16 189154/week @ 2024-02-23 196776/week @ 2024-03-01 188816/week @ 2024-03-08 196303/week @ 2024-03-15 206758/week @ 2024-03-22 195421/week @ 2024-03-29 194229/week @ 2024-04-05 197970/week @ 2024-04-12 195116/week @ 2024-04-19 185929/week @ 2024-04-26 190310/week @ 2024-05-03 160876/week @ 2024-05-10

765,496 downloads per month
Used in 1,749 crates (159 directly)

MIT/Apache

32KB
784 lines

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.

Dependencies

~205KB