3个不稳定版本
0.2.0 | 2022年11月3日 |
---|---|
0.1.1 | 2022年1月18日 |
0.1.0 | 2022年1月14日 |
在解析器实现中排名#1259
125KB
3.5K SLoC
这是一个基于nom的SDP解析器。它可以解析和重新序列化,目前针对非常小的wasm占用空间进行了优化(因此使用了ufmt)。您不需要重新序列化?只需构建时加上--no-default-features
。
为什么?
已经有mozilla的webrtc-sdp、webrtc.rs中的sdp和sdp-types,它们都是非常优秀的,为什么还要再做一个?这仍然是一个非常“为了乐趣”的项目,所以请忽略我!
cargo-features
名称 | 功能 | 默认 |
---|---|---|
udisplay | 使用ufmt重新序列化会话和行 | 是 |
debug | 为所有类型提供Debug 格式化 |
是 |
serde | 当然有serde支持 | 否 |
wee | 使用wee分配器 | 否 |
目标
使用这个解析器,我们尝试实现一个wasm友好型、低复制和高层nom解析器。
WASM友好型
通过使用wee和ufmt,我们试图实现小型的二进制文件大小。进一步的Debug打印是一个可以禁用的功能。进一步的具体wasm相关工作正在进行中。
低复制
零复制似乎有些遥远,但这个解析器试图在不实际复制sdp内容的情况下尽可能地实现这一点。这是通过将任何字符串读取到Cow
中并可选地创建内容的静态拷贝来实现的。
函数式高层解析器组合器
SDP是一个奇怪的标准,除了行的开始是随后的一个char
和=
之外,没有容器格式规范。基本上,每一行都有自己的规则。因此,每一行都有自己的解析器,就像这个例子一样
/// Email `e=<email-address>`
pub struct EmailAddress<'a>(pub Cow<'a, str>);
/// "[email protected]"
pub fn email_address_line(input: &str) -> IResult<&str, EmailAddress> {
line("e=", wsf(map(cowify(read_string), EmailAddress)))(input)
}
许可证
icalendar-rs许可在以下两者之间
- Apache许可证,版本2.0,(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
由您选择。
贡献
欢迎以描述性和友好的问题或全面的拉取请求形式提供的任何帮助!
除非您明确表示,否则您根据Apache-2.0许可证定义的,有意提交以包含在sdp-nom中的任何贡献,应如上双授权,无需任何额外的条款或条件。
依赖关系
~2–3MB
~59K SLoC