pub const DEFAULT_MAX_FIELD_SECTION_SIZE: u64 = 16 * 1024;
pub const DEFAULT_QPACK_MAX_TABLE_CAPACITY: u64 = 4096;
pub const DEFAULT_QPACK_BLOCKED_STREAMS: u64 = 100;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Limits {
pub max_field_section_size: u64,
pub qpack_max_table_capacity: u64,
pub qpack_blocked_streams: u64,
}
impl Default for Limits {
fn default() -> Self {
Self {
max_field_section_size: DEFAULT_MAX_FIELD_SECTION_SIZE,
qpack_max_table_capacity: DEFAULT_QPACK_MAX_TABLE_CAPACITY,
qpack_blocked_streams: DEFAULT_QPACK_BLOCKED_STREAMS,
}
}
}
impl Limits {
pub fn new() -> Self {
Self::default()
}
pub fn max_field_section_size(mut self, size: u64) -> Self {
self.max_field_section_size = size;
self
}
pub fn qpack_max_table_capacity(mut self, capacity: u64) -> Self {
self.qpack_max_table_capacity = capacity;
self
}
pub fn qpack_blocked_streams(mut self, streams: u64) -> Self {
self.qpack_blocked_streams = streams;
self
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_limits() {
let limits = Limits::default();
assert_eq!(
limits.max_field_section_size,
DEFAULT_MAX_FIELD_SECTION_SIZE
);
assert_eq!(
limits.qpack_max_table_capacity,
DEFAULT_QPACK_MAX_TABLE_CAPACITY
);
assert_eq!(limits.qpack_blocked_streams, DEFAULT_QPACK_BLOCKED_STREAMS);
}
#[test]
fn test_builder() {
let limits = Limits::new()
.max_field_section_size(32 * 1024)
.qpack_max_table_capacity(4096)
.qpack_blocked_streams(100);
assert_eq!(limits.max_field_section_size, 32 * 1024);
assert_eq!(limits.qpack_max_table_capacity, 4096);
assert_eq!(limits.qpack_blocked_streams, 100);
}
}