5 个版本
使用旧的Rust 2015
0.6.1 | 2019年10月11日 |
---|---|
0.6.0 | 2018年6月11日 |
0.3.0 |
|
0.2.2 | 2017年11月13日 |
#480 in 编码
每月下载量 3,435
用于 31 个crate(11 个直接使用)
50KB
925 行
quoted-string
此crate提供处理如媒体类型(包括MIME(即邮件)和HTTP)中出现的引用字符串的实用工具。由于不同规范之间存在许多微小但重要的差异,因此此crate不提供特定的实现。相反,公开了一个QuotedStringSpec
trait。通过实现它(在零尺寸类型上),应允许与任何引用字符串规范一起使用。
可用的功能包括
-
quote_if_needed
("e
):如果有必要,对内容进行引用,QuotedStringSpec
的UnquotedValidator
部分可以用来指定哪些值是有效的,而无需将其表示为引用字符串。例如,在媒体类型中,参数值abc
可以直接在quoted_if_needed
上表示。其好处是它返回一个Cow
,因此只有在实际需要表示为引用字符串时才进行字符串复制。 -
to_content
:检索引用字符串的内容,这意味着将移除周围的'"'
引号,并将任何引用对(例如"\\\""/
r#"\""#
)替换为其值。如果没有引用对阻止不必要的分配,则此函数返回Cow::Borrowed
。 -
ContentChars
:一个遍历引用字符串内容的字符迭代器,即它会去除周围的DQUOTE
,并且(动态地)取消引用不需要额外内存分配的引用对。这可以用来语义上比较两个引用字符串,而不管它们如何使用quoted-pair
,它实现了Eq
。 -
parse
(&validate
):解析输入开始处的引用字符串。它被编写得易于与nom
集成(尽管它不依赖于nom
,单独使用它同样简单)
示例
extern crate quoted_string;
// we use a QuotedStringSpec provided for testing here,
// not that it's made to hit some edge cases in a simple way
// so it does not correspond to any used real Spec
use quoted_string::test_utils::{TestSpec as Spec};
use quoted_string::spec::AsciiWordValidator;
use quoted_string::{parse, quote, quote_if_needed, to_content};
fn main() {
let res = parse::<Spec>("\"quoted\\\"st\\ring\"; tail=x").unwrap();
let qs = res.quoted_string;
assert_eq!(qs, "\"quoted\\\"st\\ring\"");
assert_eq!(res.tail, "; tail=x");
let content = to_content::<Spec>(qs)
.expect("[BUG] to_content is guaranteed to succeed if input is a valid quoted string");
assert_eq!(content, "quoted\"string");
let re_quoted = quote::<Spec>(&*content)
.expect("[BUG] quote is guaranteed to succeed if the input is representable in a quoted string");
assert_eq!(re_quoted, "\"quoted\\\"string\"");
// TestSpec specifies us-ascii words with 6 letters need no quoting
let mut without_quoting = AsciiWordValidator;
let out = quote_if_needed::<Spec, _>("simple", &mut without_quoting).unwrap();
assert_eq!(&*out, "simple");
}
许可证
在以下任一许可证下授权:
- Apache License,版本 2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确说明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献,都应按上述方式双重许可,不附加任何额外条款或条件。
变更日志
-
0.3.0:通过引入
QuotedStringSpec
使软件包独立于任何特定的引用字符串规范,因为媒体类型中引用字符串在 HTTP 中的差异很多,因此在 MIME(邮件)中也存在差异 -
0.3.1:注意到
ValidationResult
没有公开,但也没有在公共接口中收到私有类型的警告... 已修复 -
0.4.0:
- 从
ValidationResult
中移除了Escape
- 将
NotSemanticWs
重命名为NotSemantic
- 将
Quotable
重命名为NeedsQuotedPair
- 从
UnquotedValidator
中移除了不必要的Err
关联类型 - 为
UnquotedValidator
和QuotedValidator
的end_validation
添加了默认实现
- 从
-
0.5.0:
- 将规范更改为由内部自动机使用
- 将
strip_quotes
重命名为strip_dquotes
- 为 WithoutQuotingValidator::end 添加默认实现
-
0.6.0:
- 最低 rust 版本现在是
rustc v1.24
- 添加了
AsciiWordValidator
- 修复了 README 中的示例
- 最低 rust 版本现在是