#![cfg_attr(not(test), allow(dead_code, unused_imports))]
use std::error::Error;
use ruststream::memory::prelude::*;
use ruststream::testing::TestApp;
const FRAME: &[u8] = b"\x00\x01raw \xffbytes";
#[derive(Deserialized)]
struct Frame<'a>(&'a [u8]);
#[derive(Outgoing, Serialized)]
struct Export(Vec<u8>);
#[subscriber("frames", reply("exports"))]
async fn reverse(frame: &Frame<'_>) -> Export {
tracing::info!(len = frame.0.len(), "reversed");
let mut bytes = frame.0.to_vec();
bytes.reverse();
Export(bytes)
}
fn app() -> impl App {
RustStream::new(AppInfo::new("frames", "0.1.0")).with_broker(MemoryBroker::new(), |b| {
b.include(reverse);
})
}
#[tokio::test]
async fn the_bytes_pass_untouched() -> Result<(), Box<dyn Error>> {
let tb = TestApp::start(app()).await?;
let broker = tb.broker::<MemoryBroker>();
broker
.message(&Export(FRAME.to_vec()))
.to("frames")
.publish()
.await?;
let mut reversed = FRAME.to_vec();
reversed.reverse();
broker
.subscriber("frames")
.assert_called_once()
.with_raw(FRAME)
.settled(HandlerOutcome::ack());
broker
.published::<Export>("exports")
.assert_called_once()
.with_raw(&reversed);
Ok(())
}
fn main() {}