use std::time::Duration;
use serde::{Deserialize, Serialize};
#[cfg_attr(feature = "macros", derive(ruststream::Outgoing))]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[allow(dead_code)]
pub(crate) struct Order {
pub(crate) id: u32,
}
#[cfg_attr(feature = "macros", derive(ruststream::Outgoing))]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[allow(dead_code)]
pub(crate) struct Receipt {
pub(crate) id: u32,
}
#[cfg_attr(feature = "macros", derive(ruststream::Outgoing))]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[allow(dead_code)]
pub(crate) struct Event {
pub(crate) id: u64,
}
#[allow(dead_code)]
pub(crate) fn payload(id: u64) -> Vec<u8> {
serde_json::to_vec(&Event { id }).expect("an event serializes")
}
#[cfg_attr(
feature = "macros",
derive(ruststream::Outgoing, ruststream::Serialized)
)]
#[derive(Debug, Clone, PartialEq, Eq)]
#[allow(dead_code)]
pub(crate) struct Wire(pub(crate) Vec<u8>);
#[allow(dead_code)]
impl Wire {
pub(crate) fn of(bytes: impl AsRef<[u8]>) -> Self {
Self(bytes.as_ref().to_vec())
}
}
#[cfg_attr(feature = "macros", derive(ruststream::Outgoing))]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[allow(dead_code)]
pub(crate) struct Req {
pub(crate) n: u32,
}
#[cfg_attr(feature = "macros", derive(ruststream::Outgoing))]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[allow(dead_code)]
pub(crate) struct Resp {
pub(crate) n: u32,
}
#[cfg(feature = "memory")]
#[allow(dead_code)]
pub(crate) async fn connected<Log: ruststream::memory::LogMode>(
broker: &ruststream::memory::MemoryBroker<Log>,
) -> ruststream::memory::ConnectedMemoryBroker<Log> {
ruststream::Broker::connect(broker.clone())
.await
.expect("memory connect is infallible")
}
#[cfg(feature = "memory")]
#[allow(dead_code)]
pub(crate) async fn observed_memory() -> (
ruststream::memory::MemoryBroker<ruststream::memory::Retaining>,
ruststream::memory::MemoryPublisher,
ruststream::memory::ConnectedMemoryBroker<ruststream::memory::Retaining>,
) {
let broker = ruststream::memory::MemoryBroker::retaining(
ruststream::memory::Retention::Messages(ruststream::nonzero!(64)),
);
let ingress = broker.publisher();
let observer = connected(&broker).await;
(broker, ingress, observer)
}
#[cfg(all(feature = "memory", feature = "testing"))]
#[allow(dead_code)]
pub(crate) async fn expect_id<Log: ruststream::memory::LogMode>(
observer: &ruststream::memory::ConnectedMemoryBroker<Log>,
name: &str,
id: u64,
) {
let seen =
ruststream::testing::expect_published(observer, name, 1, Duration::from_secs(2)).await;
assert_eq!(seen.len(), 1, "expected one publish on {name}");
let event: Event = serde_json::from_slice(seen[0].payload()).expect("decodes");
assert_eq!(event.id, id);
}