4 个版本

0.1.3 2021 年 7 月 15 日
0.1.2 2021 年 7 月 14 日
0.1.1 2021 年 2 月 18 日
0.1.0 2020 年 10 月 12 日

#16 in #string-representation

Download history 14228/week @ 2024-04-07 12357/week @ 2024-04-14 14335/week @ 2024-04-21 13892/week @ 2024-04-28 15110/week @ 2024-05-05 12417/week @ 2024-05-12 14163/week @ 2024-05-19 13698/week @ 2024-05-26 13424/week @ 2024-06-02 13587/week @ 2024-06-09 13928/week @ 2024-06-16 11404/week @ 2024-06-23 10675/week @ 2024-06-30 11748/week @ 2024-07-07 10803/week @ 2024-07-14 12003/week @ 2024-07-21

45,393 每月下载量
14 个 crate 中使用 (通过 tinystr-macros)

Apache-2.0/MIT

7KB
145

tinystr crates.io 构建状态 覆盖率状态

tinystr 是一种小型只包含 ASCII 字符的定长字符串表示。

用法

use tinystr::{TinyStr4, TinyStr8, TinyStr16, TinyStrAuto};

fn main() {
    let s1: TinyStr4 = "tEsT".parse()
        .expect("Failed to parse.");

    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 = "New York".parse()
        .expect("Failed to parse.");

    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 = "metaMoRphosis123".parse()
        .expect("Failed to parse.");

    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().unwrap();
    assert!(matches!(s4, TinyStrAuto::Tiny { .. }));
    assert_eq!(s4, "shortNoAlloc");

    let s5: TinyStrAuto = "longFallbackToHeap".parse().unwrap();
    assert!(matches!(s4, TinyStrAuto::Heap { .. }));
    assert_eq!(s4, "shortNoAlloc");
}

详细信息

该 crate 提供了三个结构和一个枚举

  • TinyStr4 限制为 4 个字符的 ASCII 只字符串。
  • TinyStr8 限制为 8 个字符的 ASCII 只字符串。
  • TinyStr16 限制为 16 个字符的 ASCII 只字符串。
  • TinyStrAuto (枚举)
    • Tiny 当字符串长度为 16 个字符或更短时。
    • Heap 当字符串长度为 17 个字符或更长时。

这些结构使用 u32/u64/u128 存储字符,并使用位掩码提供基本的字符串操作

  • is_ascii_numeric
  • is_ascii_alphabetic
  • is_ascii_alphanumeric
  • to_ascii_lowercase
  • to_ascii_uppercase
  • to_ascii_titlecase
  • PartialEq

TinyStrAuto 在字符串足够短时将其存储为 TinyStr16,否则回退到标准的 String。当您预期大多数字符串长度为 16 个字符或更短,但偶尔会收到超出该长度的字符串时,应使用 TinyStrAuto。与结构不同,TinyStrAuto 不实现 Copy

此集合足以满足某些类别的用途,例如 unic-langid 库。

no_std

禁用此crate中的std特性,使其变为#[no_std]模式。这样做会禁用TinyStrAuto。您可以通过启用alloc特性在#[no_std]模式下重新启用TinyStrAuto

性能

对于这些用途,TinyStr提供的性能特性比常规的String要好得多。

状态

该crate功能齐全,可用于生产环境。其功能可以扩展。

许可证

根据您的要求,许可协议为Apache许可证版本2.0MIT许可证

lib.rs:

tinystr-raw导出将字节字符串转换为原始TinyStr数据的函数。

不建议公开使用;请使用tinystr代替。

无运行时依赖

特性