3个不稳定版本

0.2.0 2022年11月3日
0.1.1 2022年1月18日
0.1.0 2022年1月14日

解析器实现中排名#1259

MIT/Apache

125KB
3.5K SLoC

sdp-nom

build Crates.io contributors maintenance

version documentation license

这是一个基于nom的SDP解析器。它可以解析和重新序列化,目前针对非常小的wasm占用空间进行了优化(因此使用了ufmt)。您不需要重新序列化?只需构建时加上--no-default-features

为什么?

已经有mozilla的webrtc-sdpwebrtc.rs中的sdpsdp-types,它们都是非常优秀的,为什么还要再做一个?这仍然是一个非常“为了乐趣”的项目,所以请忽略我!

cargo-features

名称 功能 默认
udisplay 使用ufmt重新序列化会话和行
debug 为所有类型提供Debug格式化
serde 当然有serde支持
wee 使用wee分配器

目标

使用这个解析器,我们尝试实现一个wasm友好型、低复制和高层nom解析器。

WASM友好型

通过使用weeufmt,我们试图实现小型的二进制文件大小。进一步的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许可证定义的,有意提交以包含在sdp-nom中的任何贡献,应如上双授权,无需任何额外的条款或条件。

依赖关系

~2–3MB
~59K SLoC