2 个不稳定版本
0.2.0 | 2024年6月15日 |
---|---|
0.1.0 | 2024年6月4日 |
在 解析器实现 中排名第 1121
19KB
522 行
anyseq
anyseq 是一个 Rust 包,提供了一个名为 Lexer
的特质,用于将结构化文本分割成字符串标记。通过实现此特质,可以自动生成 serde
的 Deserializer。
功能
- 提供了一个名为
Lexer
的特质,用于创建标记流。 - 当实现此特质时,会自动生成
serde
Deserializer。 - 简化了 Deserializer 的实现,例如将逗号分隔的字符串分割成标记的 lexer。
Lexer
与winnow
包兼容,使得在使用winnow
时更容易实现。
使用
use anyseq::{Token, Lexer};
use anyseq::de::Deserializer;
use serde::Deserialize;
struct IterLexer;
impl<I, O> Lexer<I, Token<O>> for IterLexer
where
I: Iterator<Item = O>
{
type Error = Box<dyn std::error::Error>;
fn item(input: &mut I) -> Result<Token<O>, Self::Error> {
Ok(match input.next() {
Some(t) => Token::Item(t),
None => Token::SeqEnd,
})
}
}
#[derive(Debug, PartialEq, Deserialize)]
struct Test {
a: i32,
b: String,
}
let mut d = Deserializer::<IterLexer, _, _>::new(["42", "foo"].into_iter());
assert_eq!(
Test {
a: 42,
b: "foo".to_string(),
},
Test::deserialize(&mut d).unwrap()
);
依赖
~1.2–1.8MB
~38K SLoC