#escaping #fmt #no-std

no-std rescue-blanket

在格式化过程中转义值

2 个不稳定版本

0.2.0 2022年2月26日
0.1.0 2022年2月2日

Rust 模式 中排名 #2897

MIT 许可证

11KB
73

rescue-blanket — 在格式化过程中转义值

此包提供了 Escaped,一个用于在格式化时转义值中特殊字符和结构的包装器,以及 Escaper,一个用于定义转义逻辑的特质。此外,它还提供了 Escapable,一个用于方便将值包装在 Escaped 中的增强特质。

包装方法允许转义实现 Display 的任意值,而不需要缓冲它们。

示例

use rescue_blanket::Escapable;
println!("foo=\"{}\"", "bar=\"baz\"".escaped_with(char::escape_default));

许可证

此作品在 MIT 许可证下提供。有关更多详细信息,请参阅 LICENSE


lib.rs:

在格式化过程中转义值

在处理数据时,特别是在以字符序列(字符串、流等)的形式转发数据时,需要转义在格式中具有特殊意义的某些字符或结构。此包提供了 [Escaped],一个实现 [Display] 的包装器,使得内部值在格式化时自动转义。

可以通过 [Escaper] 特质或提供 FnMut(char) -> Display + Clone 来自定义转义逻辑。

建议用户直接导入 [Escaped],而不是导入 [Escapable]。此便利特质增强所有 [Sized] [Display] 类型,并使用 [Escaped] 包装值(对于无大小类型,可以使用值的引用)

use rescue_blanket::Escapable;
println!("foo=\"{}\"", "bar=\"baz\"".escaped_with(char::escape_default));

为什么使用 rescue_blanket

已经有许多用于转义字符串的包,而且已经有了 str::escape_defaultescape_debugescape_unicode,为什么还需要另一个库?

这些函数和库我找到的,只有当需要转义的值已经作为 [str] 可访问时才有效。然而,有时值可能更复杂,可能是递归的,并且可能不希望在它们的 [Display] 实现中放入转义逻辑。毕竟,转义的需求来自值格式化的上下文,而不是值本身。

始终可以将复杂值格式化为某些缓冲区(例如 [String])并应用转义到结果,但这需要额外的缓冲区,并且可能希望避免这种情况。根据 [Escaper],使用 [Escaped] 不涉及任何额外的缓冲。

无运行时依赖

功能