diff --git a/Cargo.lock b/Cargo.lock index 7be3f03..27ec31b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -32,12 +32,6 @@ dependencies = [ "libc", ] -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - [[package]] name = "autocfg" version = "1.1.0" @@ -46,7 +40,7 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "aws_event_stream_parser" -version = "0.1.2" +version = "0.2.0" dependencies = [ "byteorder", "bytes", @@ -73,18 +67,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "build_const" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ae4235e6dac0694637c763029ecea1a2ec9e4e06ec2729bd21ba4d9c863eb7" - [[package]] name = "bumpalo" version = "3.14.0" @@ -140,13 +122,19 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "crc" -version = "1.8.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" dependencies = [ - "build_const", + "crc-catalog", ] +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "futures-core" version = "0.3.28" @@ -167,9 +155,9 @@ checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" [[package]] name = "hex-literal" -version = "0.3.4" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" +checksum = "bcaaec4551594c969335c98c903c1397853d4198408ea609190f420500f6be71" [[package]] name = "iana-time-zone" @@ -196,26 +184,14 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ + "once_cell", "wasm-bindgen", ] -[[package]] -name = "lexical-core" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe" -dependencies = [ - "arrayvec", - "bitflags", - "cfg-if", - "ryu", - "static_assertions", -] - [[package]] name = "libc" version = "0.2.149" @@ -234,6 +210,12 @@ version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.7.1" @@ -245,13 +227,12 @@ dependencies = [ [[package]] name = "nom" -version = "5.1.3" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08959a387a676302eebf4ddbcbc611da04285579f76f88ee0506c63b1a61dd4b" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ - "lexical-core", "memchr", - "version_check", + "minimal-lexical", ] [[package]] @@ -309,16 +290,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] -name = "ryu" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" - -[[package]] -name = "static_assertions" -version = "1.1.0" +name = "rustversion" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "syn" @@ -383,35 +358,35 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" - -[[package]] -name = "version_check" -version = "0.9.4" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", + "once_cell", + "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", "syn", @@ -420,9 +395,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -430,9 +405,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", @@ -443,9 +418,12 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +dependencies = [ + "unicode-ident", +] [[package]] name = "windows" diff --git a/Cargo.toml b/Cargo.toml index 08b63a3..8eab32f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,24 +1,24 @@ [package] name = "aws_event_stream_parser" -version = "0.1.2" +version = "0.2.0" license = "MIT" readme = "readme.md" description = "Rust implementation of the vnd.amazon.event-stream binary format" repository = "https://github.com/emblica/aws-event-stream-parser-rs" authors = ["Teemu Heikkilä "] -edition = "2018" +edition = "2024" exclude = [ "doc/*" ] [dependencies] -nom = "5.1.3" -crc = "^1.0.0" +nom = "7.1.3" +crc = "3.3.0" byteorder = "1" chrono = "0.4" -uuid = "0.8.2" +uuid = "1.18.1" tokio-util = { version = "0.7.9", features = ["codec"] } bytes = "1.5.0" [dev-dependencies] -hex-literal = "0.3.1" +hex-literal = "1.0.0" diff --git a/changelog.md b/changelog.md index f7a4be7..698b90a 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,8 @@ +## 0.2.0 +2025-10-01 + +Update dependencies + ## 0.1.0 2020-09-03 diff --git a/src/lib.rs b/src/lib.rs index a5d8693..9ae7f28 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,35 +2,24 @@ //! It's used in some AWS APIs, this library has been created to be used with AWS Kinesis **SubscribeToShard**-endpoint //! -#[cfg(test)] -#[macro_use] -extern crate hex_literal; -#[macro_use] -extern crate nom; -extern crate byteorder; -extern crate bytes; -extern crate chrono; -extern crate crc; -extern crate tokio_util; -extern crate uuid; -use byteorder::BigEndian; -use byteorder::ByteOrder; +use byteorder::{BigEndian, ByteOrder}; use bytes::BufMut; +use bytes::BytesMut; use chrono::prelude::*; -use crc::crc32; -use crc::Hasher32; -use nom::number::streaming::{be_u16, be_u32, be_u64, be_u8}; -use nom::Err::Error; -use nom::Err::Failure; -use nom::Err::Incomplete; -use nom::IResult; +use crc::{CRC_32_ISO_HDLC, Crc}; +use nom::{ + IResult, + bytes::streaming::take, + error::ErrorKind, + number::streaming::{be_u8, be_u16, be_u32, be_u64}, +}; use std::convert::From; +use std::io; +use tokio_util::codec::{Decoder, Encoder}; use uuid::Uuid; const PRELUDE_SIZE: u32 = 12; const CHECKSUM_SIZE: u32 = 4; -use nom::bytes::streaming::take; - fn u32_to_u8(x: u32) -> Vec { let mut buf = [0u8; 4]; BigEndian::write_u32(&mut buf, x); @@ -180,10 +169,11 @@ impl PreludeBlock { } } fn _calculate_crc(total_length: u32, headers_length: u32) -> u32 { - let mut digest = crc32::Digest::new(crc32::IEEE); - digest.write(&u32_to_u8(total_length)); - digest.write(&u32_to_u8(headers_length)); - digest.sum32() + let crc = Crc::::new(&CRC_32_ISO_HDLC); + let mut data = Vec::new(); + data.extend(&u32_to_u8(total_length)); + data.extend(&u32_to_u8(headers_length)); + crc.checksum(&data) } pub fn calculate_crc(&self) -> u32 { PreludeBlock::_calculate_crc(self.total_length, self.headers_length) @@ -282,11 +272,11 @@ impl Message { headers: &HeaderBlock, body: &[u8], ) -> u32 { - let mut digest = crc32::Digest::new(crc32::IEEE); - digest.write(&prelude.as_buffer()); - digest.write(&headers.as_buffer()); - digest.write(body); - digest.sum32() + let crc = Crc::::new(&CRC_32_ISO_HDLC); + let mut data = prelude.as_buffer(); + data.extend(headers.as_buffer()); + data.extend(body); + crc.checksum(&data) } pub fn as_buffer(&self) -> BytesMut { let mut buf = BytesMut::with_capacity(self.prelude.total_length as usize); @@ -303,92 +293,106 @@ impl Message { } } -named!(parse_byte<&[u8], HeaderValue>, do_parse!( - value: be_u8 >> - (HeaderValue::Byte(value)) -)); - -named!(parse_short<&[u8], HeaderValue>, do_parse!( - value: be_u16 >> - (HeaderValue::Short(value)) -)); - -named!(parse_integer<&[u8], HeaderValue>, do_parse!( - value: be_u32 >> - (HeaderValue::Integer(value)) -)); - -named!(parse_long<&[u8], HeaderValue>, do_parse!( - value: be_u64 >> - (HeaderValue::Long(value)) -)); - -named!(parse_bytes<&[u8], HeaderValue>, do_parse!( - length: be_u16 >> - value: take!(length) >> - (HeaderValue::Bytes(value.into())) -)); - -named!(parse_string<&[u8], HeaderValue>, do_parse!( - length: be_u16 >> - value: take_str!(length) >> - (HeaderValue::String(value.to_string())) -)); - -named!(parse_timestamp<&[u8], HeaderValue>, do_parse!( - epoch: be_u64 >> - (HeaderValue::Timestamp(Utc.timestamp_opt(epoch as i64, 0).unwrap())) -)); - -named!(parse_uuid<&[u8], HeaderValue>, do_parse!( - vals: take!(16) >> - (HeaderValue::Uuid(Uuid::from_slice(vals).unwrap())) -)); - -named!(parse_prelude<&[u8], PreludeBlock>, do_parse!( - message_total_length: be_u32 >> - headers_length: be_u32 >> - prelude_checksum: be_u32 >> - (PreludeBlock { - total_length: message_total_length, - headers_length, - checksum: prelude_checksum - }) -)); - -// 0 => HeaderValue::BooleanTrue, -// 1 => HeaderValue::BooleanFalse, -// 2 => HeaderValue::Byte, -// 3 => HeaderValue::Short, -// 4 => HeaderValue::Integer, -// 5 => HeaderValue::Long, -// 6 => HeaderValue::Bytes, -// 7 => HeaderValue::String, -// 8 => HeaderValue::Timestamp, -// 9 => HeaderValue::Uuid, -// _ => HeaderValue::Unknown, - -named!(parse_header<&[u8], Header>, do_parse!( - header_key_length: be_u8 >> - header_key: take_str!(header_key_length) >> - value: switch!(be_u8, - 0 => value!(HeaderValue::Boolean(true)) | - 1 => value!(HeaderValue::Boolean(false)) | - 2 => call!(parse_byte) | - 3 => call!(parse_short) | - 4 => call!(parse_integer) | - 5 => call!(parse_long) | - 6 => call!(parse_bytes) | - 7 => call!(parse_string) | - 8 => call!(parse_timestamp) | - 9 => call!(parse_uuid) | - _ => value!(HeaderValue::Unknown) - ) >> - (Header { - key: header_key.to_string(), - value - }) -)); +fn parse_byte(input: &[u8]) -> IResult<&[u8], HeaderValue> { + let (input, value) = be_u8(input)?; + Ok((input, HeaderValue::Byte(value))) +} + +fn parse_short(input: &[u8]) -> IResult<&[u8], HeaderValue> { + let (input, value) = be_u16(input)?; + Ok((input, HeaderValue::Short(value))) +} + +fn parse_integer(input: &[u8]) -> IResult<&[u8], HeaderValue> { + let (input, value) = be_u32(input)?; + Ok((input, HeaderValue::Integer(value))) +} + +fn parse_long(input: &[u8]) -> IResult<&[u8], HeaderValue> { + let (input, value) = be_u64(input)?; + Ok((input, HeaderValue::Long(value))) +} + +fn parse_bytes(input: &[u8]) -> IResult<&[u8], HeaderValue> { + let (input, length) = be_u16(input)?; + let (input, value) = take(length)(input)?; + Ok((input, HeaderValue::Bytes(value.to_vec()))) +} + +fn parse_string(input: &[u8]) -> IResult<&[u8], HeaderValue> { + let (input, length) = be_u16(input)?; + let (input, bytes) = take(length)(input)?; + let s = std::str::from_utf8(bytes) + .map_err(|_| nom::Err::Error(nom::error::Error::new(input, ErrorKind::Char)))?; + Ok((input, HeaderValue::String(s.to_string()))) +} + +fn parse_timestamp(input: &[u8]) -> IResult<&[u8], HeaderValue> { + let (input, epoch) = be_u64(input)?; + let dt = Utc + .timestamp_opt(epoch as i64, 0) + .single() + .ok_or_else(|| nom::Err::Error(nom::error::Error::new(input, ErrorKind::MapRes)))?; + Ok((input, HeaderValue::Timestamp(dt))) +} + +fn parse_uuid(input: &[u8]) -> IResult<&[u8], HeaderValue> { + let (input, vals) = take(16usize)(input)?; + let uuid = Uuid::from_slice(vals) + .map_err(|_| nom::Err::Error(nom::error::Error::new(input, ErrorKind::MapRes)))?; + Ok((input, HeaderValue::Uuid(uuid))) +} + +fn parse_prelude(input: &[u8]) -> IResult<&[u8], PreludeBlock> { + let (input, total_length) = be_u32(input)?; + let (input, headers_length) = be_u32(input)?; + let (input, checksum) = be_u32(input)?; + Ok(( + input, + PreludeBlock { + total_length, + headers_length, + checksum, + }, + )) +} + +fn parse_header(input: &[u8]) -> IResult<&[u8], Header> { + let (input, key_length) = be_u8(input)?; + let (input, key_bytes) = take(key_length)(input)?; + let key = std::str::from_utf8(key_bytes) + .map_err(|_| nom::Err::Error(nom::error::Error::new(input, ErrorKind::Char)))? + .to_string(); + + let (input, type_code) = be_u8(input)?; + // 0 => HeaderValue::BooleanTrue, + // 1 => HeaderValue::BooleanFalse, + // 2 => HeaderValue::Byte, + // 3 => HeaderValue::Short, + // 4 => HeaderValue::Integer, + // 5 => HeaderValue::Long, + // 6 => HeaderValue::Bytes, + // 7 => HeaderValue::String, + // 8 => HeaderValue::Timestamp, + // 9 => HeaderValue::Uuid, + // _ => HeaderValue::Unknown, + let (input, value) = match type_code { + 0 => Ok((input, HeaderValue::Boolean(true))), + 1 => Ok((input, HeaderValue::Boolean(false))), + 2 => parse_byte(input), + 3 => parse_short(input), + 4 => parse_integer(input), + 5 => parse_long(input), + 6 => parse_bytes(input), + 7 => parse_string(input), + 8 => parse_timestamp(input), + 9 => parse_uuid(input), + _ => Ok((input, HeaderValue::Unknown)), + } + .map_err(|_e| nom::Err::Error(nom::error::Error::new(input, ErrorKind::Verify)))?; + + Ok((input, Header { key, value })) +} fn parse_header_block(input: &[u8], block_length: u32) -> IResult<&[u8], HeaderBlock> { let (input, header_bytes) = take(block_length)(input)?; @@ -396,8 +400,8 @@ fn parse_header_block(input: &[u8], block_length: u32) -> IResult<&[u8], HeaderB let mut buffer = header_bytes; let mut headers = Vec::new(); while !buffer.is_empty() { - let (header_bytes, header) = parse_header(buffer)?; - buffer = header_bytes; + let (new_buffer, header) = parse_header(buffer)?; + buffer = new_buffer; headers.push(header); } @@ -414,48 +418,47 @@ fn calculate_body_length(prelude: &PreludeBlock) -> usize { .unwrap_or(0) } -named!(pub parse_message<&[u8], Message>, do_parse!( - prelude: parse_prelude >> - headers: call!(parse_header_block, prelude.headers_length) >> - body: take!(calculate_body_length(&prelude)) >> - checksum: be_u32 >> - (Message { - prelude, - headers, - body: body.into(), - checksum, - }) -)); - -use bytes::BytesMut; -use std::{io, usize}; -use tokio_util::codec::{Decoder, Encoder}; +pub fn parse_message(input: &[u8]) -> IResult<&[u8], Message> { + let (input, prelude) = parse_prelude(input)?; + let (input, headers) = parse_header_block(input, prelude.headers_length)?; + let body_len = calculate_body_length(&prelude); + let (input, body) = take(body_len)(input)?; + let (input, checksum) = be_u32(input)?; + Ok(( + input, + Message { + prelude, + headers, + body: body.to_vec(), + checksum, + }, + )) +} #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Default)] pub struct EventStreamCodec; - impl Decoder for EventStreamCodec { type Item = Message; - type Error = std::io::Error; + type Error = io::Error; fn decode(&mut self, buf: &mut BytesMut) -> Result, Self::Error> { - match parse_message(buf) { + match crate::parse_message(buf) { Ok((rest_bytes, message)) => { *buf = BytesMut::from(rest_bytes); Ok(Some(message)) } - Err(Incomplete(_)) => Ok(None), - Err(Error(_)) => Ok(None), - Err(Failure((_, e))) => { - Err(io::Error::new(io::ErrorKind::InvalidData, e.description())) - } + Err(nom::Err::Incomplete(_)) => Ok(None), + Err(nom::Err::Error(_)) => Ok(None), + Err(nom::Err::Failure(e)) => Err(io::Error::new( + io::ErrorKind::InvalidData, + format!("Parse error: {:?}", e), + )), } } } impl Encoder for EventStreamCodec { - // type Item = Message; type Error = io::Error; fn encode(&mut self, msg: Message, buf: &mut BytesMut) -> Result<(), io::Error> { @@ -469,6 +472,7 @@ impl Encoder for EventStreamCodec { #[cfg(test)] mod tests { use super::*; + use hex_literal::hex; #[test] fn test_parse_prelude_total_length() { @@ -635,7 +639,9 @@ mod tests { #[test] fn test_symmetric_from_bytes() { - let original = hex!("000000cc000000af0fae64ca0a6576656e742d74797065040000a00c0c636f6e74656e742d747970650700106170706c69636174696f6e2f6a736f6e0a626f6f6c2066616c73650109626f6f6c207472756500046279746502cf08627974652062756606001449276d2061206c6974746c6520746561706f74210974696d657374616d70080000000000845fed05696e74313603002a05696e7436340500000000028757b20475756964090102030405060708090a0b0c0d0e0f107b27666f6f273a27626172277daba5f10c"); + let original = hex!( + "000000cc000000af0fae64ca0a6576656e742d74797065040000a00c0c636f6e74656e742d747970650700106170706c69636174696f6e2f6a736f6e0a626f6f6c2066616c73650109626f6f6c207472756500046279746502cf08627974652062756606001449276d2061206c6974746c6520746561706f74210974696d657374616d70080000000000845fed05696e74313603002a05696e7436340500000000028757b20475756964090102030405060708090a0b0c0d0e0f107b27666f6f273a27626172277daba5f10c" + ); let res = parse_message(&original).unwrap().1; assert_eq!(res.as_buffer().to_vec(), original.to_vec()); @@ -777,7 +783,7 @@ mod tests { #[test] fn test_headervalue_from_timestamp() { - let dt = Utc.ymd(2014, 7, 8).and_hms(9, 10, 11); + let dt = Utc.with_ymd_and_hms(2014, 7, 8, 9, 10, 11).unwrap(); let a: HeaderValue = dt.into(); assert_eq!(a, HeaderValue::Timestamp(dt)); @@ -889,7 +895,7 @@ mod tests { #[test] fn test_serialize_timestamp() { //HeaderValue::Timestamp(_) => 6, - let dt = Utc.ymd(2014, 7, 8).and_hms(9, 10, 11); + let dt = Utc.with_ymd_and_hms(2014, 7, 8, 9, 10, 11).unwrap(); let buf = HeaderValue::Timestamp(dt).as_buffer(); assert_eq!(buf, [0, 0, 0, 0, 83, 187, 181, 115]); if let HeaderValue::Timestamp(b) = parse_timestamp(&buf).unwrap().1 { @@ -908,7 +914,9 @@ mod tests { let buf = HeaderValue::Uuid(code).as_buffer(); assert_eq!( buf, - [147, 109, 160, 31, 154, 189, 77, 157, 128, 199, 2, 175, 133, 200, 34, 168] + [ + 147, 109, 160, 31, 154, 189, 77, 157, 128, 199, 2, 175, 133, 200, 34, 168 + ] ); if let HeaderValue::Uuid(b) = parse_uuid(&buf).unwrap().1 { assert_eq!(b, code); @@ -918,5 +926,4 @@ mod tests { // Not enough data provided (11 chars, only 1 provided) assert!(parse_uuid(&[11u8, 104u8]).is_err()); } - } diff --git a/tests/lib.rs b/tests/lib.rs index 11fc61f..0173c69 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -1,12 +1,12 @@ #[macro_use] extern crate hex_literal; +extern crate aws_event_stream_parser; extern crate bytes; extern crate tokio_util; -extern crate aws_event_stream_parser; use bytes::{BufMut, BytesMut}; -use aws_event_stream_parser::{parse_message, EventStreamCodec, Header, HeaderBlock, Message}; +use aws_event_stream_parser::{EventStreamCodec, Header, HeaderBlock, Message, parse_message}; use tokio_util::codec::{Decoder, Encoder}; #[test] @@ -78,17 +78,16 @@ fn test_decoder() { .unwrap(); let mut fbuf = BytesMut::new(); - fbuf.put_slice(&hex!( - "00000018000000083b698b18 + fbuf.put_slice( + &hex!( + "00000018000000083b698b18 047465737403007821ab3883" - ) - .to_vec()); - - assert_eq!( - fbuf, - buf + ) + .to_vec(), ); + assert_eq!(fbuf, buf); + codec .encode( Message::build( @@ -101,13 +100,15 @@ fn test_decoder() { ) .unwrap(); let mut fbuf = BytesMut::new(); - fbuf.put_slice(&hex!( - "00000018000000083b698b1 + fbuf.put_slice( + &hex!( + "00000018000000083b698b1 8047465737403007821ab38 830000001d0000000d83e3f 0e704746573740700056865 6c6c6f1afe7100" - ) - .to_vec()); + ) + .to_vec(), + ); assert_eq!(fbuf, buf); }