#event-stream #binary-format #aws #amazon-s3 #header #vnd

aws_event_stream_parser

Rust 实现的 vnd.amazon.event-stream 二进制格式

8 个版本

0.1.2 2023年10月10日
0.1.1 2023年10月10日
0.1.0 2020年9月3日
0.0.5 2019年7月9日
0.0.4 2019年6月28日

解析器实现 中排名 #1012

MIT 许可证

33KB
804 行(不包括注释)

AWS 事件流解析器

Rust 实现的 vnd.amazon.event-stream 二进制格式

实现基于以下内容

安装

将以下内容添加到您的 Cargo.toml

[dependencies]
aws_event_stream_parser = "0.1.0"

用法

普通解析器

extern crate aws_event_stream_parser;

use aws_event_stream_parser::parse_message;
let res = parse_message(&hex!("0000003d0000002007fd83960c636f6e74656e742d747970650700106170706c69636174696f6e2f6a736f6e7b27666f6f273a27626172277d8d9c08b1")).unwrap();

println!("{:?}", res);
/*
([], Message {
  prelude: PreludeBlock {
    total_length: 61,
    - headers_length: 32,
    checksum: 134054806
  },
  headers: HeaderBlock {
    headers: [
      Header { key: "content-type", value: String("application/json") }
    ]
  },
  body: [123, 39, 102, 111, 111, 39, 58, 39, 98, 97, 114, 39, 125],
  checksum: 2375813297 })
*/
println!("{:?}", res.1.valid());
// true

帧编解码器

(更多信息请参阅 https://tokio.rs/docs/going-deeper/frames/ )

use aws_event_stream_parser::EventStreamCodec;

TcpStream::connect(&addr).and_then(|sock| {
    let framed_sock = Framed::new(sock, EventStreamCodec::new());
    framed_sock.for_each(|line| {
        println!("Received line {}", line);
        Ok(())
    })
});

规范

此解析器基于 AWS 文档和其他协议实现进行建模。我们还记录了格式以供未来的实现使用。

block diagram

头图

bool and byte header diagram bytes and string header diagram integer header diagram int64 and timestamp header diagram UUID header diagram

贡献

欢迎拉取请求。对于重大更改,请先提出问题以讨论您希望更改的内容。

请确保适当地更新测试。

许可证

MIT

依赖项

~6MB
~97K SLoC