#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum BodyMode {
#[default]
Stream,
Buffer {
max_bytes: usize,
},
StreamBuffer {
max_bytes: Option<usize>,
},
SizeLimit {
max_bytes: usize,
},
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn body_mode_default_is_stream() {
assert_eq!(
BodyMode::default(),
BodyMode::Stream,
"default BodyMode should be Stream"
);
}
#[test]
fn body_mode_buffer_carries_limit() {
let mode = BodyMode::Buffer { max_bytes: 4096 };
assert!(
matches!(mode, BodyMode::Buffer { max_bytes: 4096 }),
"Buffer variant should carry configured limit"
);
}
#[test]
fn body_mode_stream_buffer_unlimited() {
let mode = BodyMode::StreamBuffer { max_bytes: None };
assert!(
matches!(mode, BodyMode::StreamBuffer { max_bytes: None }),
"StreamBuffer should support unlimited mode"
);
}
#[test]
fn body_mode_stream_buffer_with_limit() {
let mode = BodyMode::StreamBuffer { max_bytes: Some(4096) };
assert!(
matches!(mode, BodyMode::StreamBuffer { max_bytes: Some(4096) }),
"StreamBuffer should carry configured byte limit"
);
}
#[test]
fn body_mode_size_limit_carries_limit() {
let mode = BodyMode::SizeLimit { max_bytes: 2048 };
assert!(
matches!(mode, BodyMode::SizeLimit { max_bytes: 2048 }),
"SizeLimit variant should carry configured limit"
);
}
#[test]
fn body_mode_size_limit_is_distinct_from_buffer() {
assert_ne!(
BodyMode::SizeLimit { max_bytes: 100 },
BodyMode::Buffer { max_bytes: 100 },
"SizeLimit and Buffer should be distinct even with same limit"
);
}
#[test]
fn body_mode_stream_buffer_is_distinct() {
assert_ne!(
BodyMode::StreamBuffer { max_bytes: None },
BodyMode::Buffer { max_bytes: 100 },
"StreamBuffer and Buffer should be distinct variants"
);
assert_ne!(
BodyMode::StreamBuffer { max_bytes: None },
BodyMode::Stream,
"StreamBuffer and Stream should be distinct variants"
);
}
}