[−][src]Crate tinystr
tinystr is a small ASCII-only bounded length string representation.
The crate is meant to be used for scenarios where one needs a fast and memory efficient way to store and manipulate short ASCII-only strings.
tinystr converts each string into an unsigned integer, and uses bitmasking
to compare, convert cases and test for common characteristics of strings.
Details
The crate provides three structs and an enum:
- TinyStr4an ASCII-only string limited to 4 characters.
- TinyStr8an ASCII-only string limited to 8 characters.
- TinyStr16an ASCII-only string limited to 16 characters.
- TinyStrAuto(enum):- Tinywhen the string is 16 characters or less.
- Heapwhen the string is 17 or more characters.
 
TinyStrAuto stores the string as a TinyStr16 when it is short enough, or else falls back to a
standard String. You should use TinyStrAuto when you expect most strings to be 16 characters
or smaller, but occasionally you receive one that exceeds that length. Unlike the structs,
TinyStrAuto does not implement Copy.
Macros
Compile-time macros are available to convert string literals into const TinyStrs:
- tinystr4!("abc")
- tinystr8!("abcdefg")
- tinystr16!("longer-string")
no_std
Disable the std feature of this crate to make it #[no_std]. Doing so disables TinyStrAuto.
You can re-enable TinyStrAuto in #[no_std] mode by enabling the alloc feature.
Example
use tinystr::{TinyStr4, TinyStr8, TinyStr16, TinyStrAuto}; use tinystr::{tinystr4, tinystr8, tinystr16}; let s1: TinyStr4 = tinystr4!("tEsT"); assert_eq!(s1, "tEsT"); assert_eq!(s1.to_ascii_uppercase(), "TEST"); assert_eq!(s1.to_ascii_lowercase(), "test"); assert_eq!(s1.to_ascii_titlecase(), "Test"); assert_eq!(s1.is_ascii_alphanumeric(), true); let s2: TinyStr8 = tinystr8!("New York"); assert_eq!(s2, "New York"); assert_eq!(s2.to_ascii_uppercase(), "NEW YORK"); assert_eq!(s2.to_ascii_lowercase(), "new york"); assert_eq!(s2.to_ascii_titlecase(), "New york"); assert_eq!(s2.is_ascii_alphanumeric(), false); let s3: TinyStr16 = tinystr16!("metaMoRphosis123"); assert_eq!(s3, "metaMoRphosis123"); assert_eq!(s3.to_ascii_uppercase(), "METAMORPHOSIS123"); assert_eq!(s3.to_ascii_lowercase(), "metamorphosis123"); assert_eq!(s3.to_ascii_titlecase(), "Metamorphosis123"); assert_eq!(s3.is_ascii_alphanumeric(), true); let s4: TinyStrAuto = "shortNoAlloc".parse() .expect("Failed to parse."); assert!(matches!(s4, TinyStrAuto::Tiny { .. })); assert_eq!(s4, "shortNoAlloc"); let s5: TinyStrAuto = "longFallbackToHeap".parse() .expect("Failed to parse."); assert!(matches!(s5, TinyStrAuto::Heap { .. })); assert_eq!(s5, "longFallbackToHeap");
Re-exports
| pub use tinystr_macros as raw_macros; | 
Macros
| tinystr4 | Macro to create a const TinyStr4, validated with zero runtime cost. | 
| tinystr8 | Macro to create a const TinyStr8, validated with zero runtime cost. | 
| tinystr16 | Macro to create a const TinyStr8, validated with zero runtime cost. | 
Structs
| TinyStr4 | A tiny string that is from 1 to 4 non-NUL ASCII characters. | 
| TinyStr8 | A tiny string that is from 1 to 8 non-NUL ASCII characters. | 
| TinyStr16 | A tiny string that is from 1 to 16 non-NUL ASCII characters. | 
Enums
| Error | Enum to store the various types of errors that can cause parsing a TinyStr to fail. | 
| TinyStrAuto | An ASCII string that is tiny when <= 16 chars and a String otherwise. |