extern crate alloc;
use crate::common_types::SampleIdentity;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct RequestIdentity {
pub sample_identity: SampleIdentity,
pub via_inline_qos: bool,
}
impl RequestIdentity {
#[must_use]
pub fn from_header(sample_identity: SampleIdentity) -> Self {
Self {
sample_identity,
via_inline_qos: false,
}
}
#[must_use]
pub fn from_inline_qos(sample_identity: SampleIdentity) -> Self {
Self {
sample_identity,
via_inline_qos: true,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn from_header_marks_explicit_propagation() {
let id = SampleIdentity::default();
let r = RequestIdentity::from_header(id);
assert!(!r.via_inline_qos);
assert_eq!(r.sample_identity, id);
}
#[test]
fn from_inline_qos_marks_implicit_propagation() {
let id = SampleIdentity::default();
let r = RequestIdentity::from_inline_qos(id);
assert!(r.via_inline_qos);
assert_eq!(r.sample_identity, id);
}
#[test]
fn default_is_header_based_with_zero_identity() {
let r = RequestIdentity::default();
assert!(!r.via_inline_qos);
}
}