#string #fixed-length #stack-allocated

无 std fstr

堆栈分配的固定长度字符串类型

16 个版本

0.2.11 2024年8月17日
0.2.10 2023年11月20日
0.2.9 2023年10月3日
0.2.4 2023年7月10日
0.1.1 2022年11月23日

260编码 中排名

Download history 919/week @ 2024-05-04 1479/week @ 2024-05-11 1178/week @ 2024-05-18 1161/week @ 2024-05-25 1257/week @ 2024-06-01 1042/week @ 2024-06-08 949/week @ 2024-06-15 1428/week @ 2024-06-22 1908/week @ 2024-06-29 1675/week @ 2024-07-06 1414/week @ 2024-07-13 1488/week @ 2024-07-20 1072/week @ 2024-07-27 1339/week @ 2024-08-03 1152/week @ 2024-08-10 1196/week @ 2024-08-17

每月下载量 4,985
用于 10 个 crate (5 直接使用)

Apache-2.0

35KB
550

FStr: 堆栈分配的固定长度字符串类型

Crates.io License

此 crate 为 [u8; N] 提供了一个薄的包装,以便通过如 DisplayPartialEqDeref<Target = str> 等公共特质,将堆栈分配的字节数组作为类似 String 的类型处理。

use fstr::FStr;

let x = FStr::try_from(b"foo")?;
println!("{}", x); // "foo"
assert_eq!(x, "foo");
assert_eq!(&x[..], "foo");
assert_eq!(&x as &str, "foo");
assert!(!x.is_empty());
assert!(x.is_ascii());

let mut y = FStr::try_from(b"bar")?;
assert_eq!(y, "bar");
y.make_ascii_uppercase();
assert_eq!(y, "BAR");

const K: FStr<8> = FStr::from_str_unwrap("constant");
assert_eq!(K, "constant");

Stringarrayvec::ArrayString 不同,此类型与底层 [u8; N] 具有相同的二进制表示形式,并且仅管理固定长度字符串。类型参数接受具体类型的精确长度(以字节为单位),具体类型仅持有该大小的字符串值。

let s = "Lorem Ipsum ✨";
assert_eq!(s.len(), 15);
assert!(s.parse::<FStr<15>>().is_ok()); // just right
assert!(s.parse::<FStr<10>>().is_err()); // too small
assert!(s.parse::<FStr<20>>().is_err()); // too large
let x: FStr<10> = FStr::from_str_unwrap("helloworld");
let y: FStr<12> = FStr::from_str_unwrap("helloworld  ");

// This code does not compile because `FStr` of different lengths cannot mix.
if x != y {
    unreachable!();
}

通过使用 C 风格的 NUL 结束缓冲区和一些辅助方法,部分支持可变长度字符串操作。

let mut buffer = FStr::<20>::from_str_lossy("haste", b'\0');
assert_eq!(buffer, "haste\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");

let c_str = buffer.slice_to_terminator('\0');
assert_eq!(c_str, "haste");

use core::fmt::Write as _;
write!(buffer.writer_at(c_str.len()), " makes waste")?;
assert_eq!(buffer.slice_to_terminator('\0'), "haste makes waste");

Crate 功能

  • std(可选;默认启用)启用与 std 的集成。禁用默认功能以在 no_std 环境下运行此 crate。
  • serde(可选)通过 serde 启用对 FStr 的序列化和反序列化。

许可证

根据 Apache 许可证第 2 版授权。

另请参阅

依赖项

~170KB