extern crate bytes; extern crate futures; extern crate futures_codec; extern crate servant_codec as codec; // -- use bytes::Bytes; use futures::{executor, io::Cursor, sink::SinkExt, StreamExt, TryStreamExt}; use futures_codec::{BytesCodec, Decoder, Encoder, Framed, FramedRead, FramedWrite}; use std::io::Error; use codec::{AeadCodecBuilder as Builder, AES_256_GCM, HKDF_SHA512}; fn main() { executor::block_on(async move { let buf = b"Hello World!"; let mut framed = FramedRead::new(&buf[..], BytesCodec {}); let msg = framed.try_next().await.unwrap().unwrap(); println!("msg: {:?}", msg); assert_eq!(msg, Bytes::from(&buf[..])); }); let psk = "thisispsk"; let mut builder = Builder::default(); executor::block_on(codec( builder.clone().create(psk), builder.clone().create(psk), )); builder .set_salt_len(24) .set_padding_len(64) .set_aead_algorithm(&AES_256_GCM) .set_hkdf_algorithm(&HKDF_SHA512); executor::block_on(codec2( builder.clone().create(psk), builder.clone().create(psk), )); } async fn codec(c: T, d: T) where T: Encoder + Decoder + Clone, { let mut buf = vec![]; let cur = Cursor::new(&mut buf); let mut framed = FramedWrite::new(cur, c); let mut i = 0_usize; while { i += 1; let msg = Bytes::from(format!("Hello World! #{}", i)); framed.send(msg.clone()).await.unwrap(); i < 88 } {} println!("buf: {:?}", buf); i = 0; let mut framed2 = FramedRead::new(&buf[..], d); while let Some(msg2) = framed2.next().await { let msg2 = msg2.unwrap(); println!("msg: {:?}", msg2); i += 1; assert_eq!(msg2, Bytes::from(format!("Hello World! #{}", i))); } } async fn codec2(c: T, d: T) where T: Encoder + Decoder + Clone, { let mut buf = vec![]; let cur = Cursor::new(&mut buf); let mut framed = Framed::new(cur, c); let mut i = 0_usize; while { i += 1; let msg = Bytes::from(format!("Hello Customer! #{}", i)); framed.send(msg.clone()).await.unwrap(); i < 68 } {} println!("buf: {:?}", buf); i = 0; let cur = Cursor::new(&mut buf); let mut framed2 = Framed::new(cur, d); while let Some(msg2) = framed2.try_next().await.unwrap() { println!("msg: {:?}", msg2); i += 1; assert_eq!(msg2, Bytes::from(format!("Hello Customer! #{}", i))); } }