#[derive(Debug, Clone, Copy)]
pub struct TlsBufferCapacities {
read_chunk: usize,
pending_write: usize,
rustls_plaintext_limit: Option<usize>,
}
impl TlsBufferCapacities {
pub const fn builder() -> TlsBufferCapacitiesBuilder {
TlsBufferCapacitiesBuilder {
read_chunk: 18 * 1024,
pending_write: 16 * 1024,
rustls_plaintext_limit: None,
}
}
#[inline]
pub const fn read_chunk(&self) -> usize {
self.read_chunk
}
#[inline]
pub const fn pending_write(&self) -> usize {
self.pending_write
}
#[inline]
pub const fn rustls_plaintext_limit(&self) -> Option<usize> {
self.rustls_plaintext_limit
}
}
impl Default for TlsBufferCapacities {
fn default() -> Self {
Self::builder().build()
}
}
#[derive(Debug, Clone, Copy)]
pub struct TlsBufferCapacitiesBuilder {
read_chunk: usize,
pending_write: usize,
rustls_plaintext_limit: Option<usize>,
}
impl TlsBufferCapacitiesBuilder {
pub const fn read_chunk(mut self, bytes: usize) -> Self {
self.read_chunk = bytes;
self
}
pub const fn pending_write(mut self, bytes: usize) -> Self {
self.pending_write = bytes;
self
}
pub const fn rustls_plaintext_limit(mut self, bytes: Option<usize>) -> Self {
self.rustls_plaintext_limit = bytes;
self
}
pub const fn build(self) -> TlsBufferCapacities {
assert!(
self.read_chunk > 0,
"TlsBufferCapacities::read_chunk must be > 0"
);
assert!(
self.pending_write > 0,
"TlsBufferCapacities::pending_write must be > 0"
);
TlsBufferCapacities {
read_chunk: self.read_chunk,
pending_write: self.pending_write,
rustls_plaintext_limit: self.rustls_plaintext_limit,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn defaults_match_builder_no_overrides() {
let a = TlsBufferCapacities::default();
let b = TlsBufferCapacities::builder().build();
assert_eq!(a.read_chunk(), b.read_chunk());
assert_eq!(a.pending_write(), b.pending_write());
assert_eq!(a.rustls_plaintext_limit(), b.rustls_plaintext_limit());
assert_eq!(a.read_chunk(), 18 * 1024);
assert_eq!(a.pending_write(), 16 * 1024);
assert!(a.rustls_plaintext_limit().is_none());
}
#[test]
fn builder_overrides() {
let c = TlsBufferCapacities::builder()
.read_chunk(4096)
.pending_write(32 * 1024)
.rustls_plaintext_limit(Some(16 * 1024))
.build();
assert_eq!(c.read_chunk(), 4096);
assert_eq!(c.pending_write(), 32 * 1024);
assert_eq!(c.rustls_plaintext_limit(), Some(16 * 1024));
}
#[test]
#[should_panic(expected = "read_chunk must be > 0")]
fn build_panics_on_zero_read_chunk() {
let _ = TlsBufferCapacities::builder().read_chunk(0).build();
}
#[test]
#[should_panic(expected = "pending_write must be > 0")]
fn build_panics_on_zero_pending_write() {
let _ = TlsBufferCapacities::builder().pending_write(0).build();
}
}