Expand description

Key String: Optimized for map keys.

Examples

String creation

// Explicit
let literal = kstring::KString::from_static("literal");
// Implicit
let literal = kstring::KString::from("literal");

// Explicit
let inline = kstring::KString::try_inline("stack").unwrap();
let inline = kstring::KString::from_ref("stack");

let formatted: kstring::KStringCow = format!("Hello {} and {}", literal, inline).into();

Background

Considerations:

  • Large maps
  • Most keys live and drop without being used in any other way
  • Most keys are relatively small (single to double digit bytes)
  • Keys are immutable
  • Allow zero-cost abstractions between structs and maps (e.g. no allocating when dealing with struct field names)

Ramifications:

  • Inline small strings rather than going to the heap.
  • Preserve &'static str across strings (KString), references (KStringRef), and lifetime abstractions (KStringCow) to avoid allocating for struct field names.
  • Use Box<str> rather than String to use less memory.

Feature Flags

  • std (enabled by default) — Allow use of std

  • arc — O(1) clone support

  • max_inline — Inline (stack) strings use the full width of KStrings

  • unsafe (enabled by default) — Allow unsafe code

  • serdeserde compatibility

Modules

Structs

A UTF-8 encoded, immutable string.

A reference to a UTF-8 encoded, immutable string.

A reference to a UTF-8 encoded, immutable string.

Fixed-size stack-allocated string

Type Definitions

A UTF-8 encoded, immutable string.

A reference to a UTF-8 encoded, immutable string.