2 个不稳定版本
0.2.0 | 2022年2月26日 |
---|---|
0.1.0 | 2022年2月2日 |
在 Rust 模式 中排名 #2897
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_default、escape_debug 和 escape_unicode,为什么还需要另一个库?
这些函数和库我找到的,只有当需要转义的值已经作为 [str] 可访问时才有效。然而,有时值可能更复杂,可能是递归的,并且可能不希望在它们的 [Display] 实现中放入转义逻辑。毕竟,转义的需求来自值格式化的上下文,而不是值本身。
始终可以将复杂值格式化为某些缓冲区(例如 [String])并应用转义到结果,但这需要额外的缓冲区,并且可能希望避免这种情况。根据 [Escaper],使用 [Escaped] 不涉及任何额外的缓冲。