use flowscope::driver::{DriverBuilder, SlotHandle};
use flowscope::extract::{FiveTuple, FiveTupleKey};
use crate::protocol::{Dispatch, FlowProtocol, Protocol, ProtocolInitError};
#[derive(Debug, Clone, Copy)]
pub struct Udp;
impl Protocol for Udp {
type Message = ();
const NAME: &'static str = "udp";
fn dispatch() -> Dispatch {
Dispatch::AllUdp
}
fn register(
_builder: &mut DriverBuilder<FiveTuple>,
) -> Result<SlotHandle<Self::Message, FiveTupleKey>, ProtocolInitError> {
Err(ProtocolInitError(
"Udp marker is lifecycle-only — no parser; \
handled by the central flow tracker"
.into(),
))
}
}
impl FlowProtocol for Udp {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn dispatch_is_all_udp() {
assert!(matches!(<Udp as Protocol>::dispatch(), Dispatch::AllUdp));
}
#[test]
fn register_returns_err_for_lifecycle_only_marker() {
let mut b = flowscope::driver::Driver::builder(FiveTuple::bidirectional());
assert!(<Udp as Protocol>::register(&mut b).is_err());
}
}