Skip to main content

dope_core/io/socket/
backlog.rs

1use std::{mem, num};
2
3/// A positive kernel listen depth.
4#[derive(Clone, Copy, PartialEq, Eq)]
5#[repr(transparent)]
6pub struct Backlog(num::NonZero<i32>);
7
8impl Backlog {
9    /// Creates a listen depth validated during compilation.
10    pub const fn fixed<const VALUE: i32>() -> Self {
11        const { assert!(VALUE > 0) };
12        let value = match num::NonZero::<i32>::new(VALUE) {
13            Some(value) => value,
14            None => num::NonZero::<i32>::MIN,
15        };
16        Self(value)
17    }
18
19    #[must_use]
20    pub(crate) const fn get(self) -> i32 {
21        self.0.get()
22    }
23}
24
25impl From<Backlog> for num::NonZero<i32> {
26    fn from(depth: Backlog) -> Self {
27        depth.0
28    }
29}
30
31const _: () = {
32    assert!(mem::size_of::<Backlog>() == mem::size_of::<i32>());
33    assert!(mem::size_of::<Option<Backlog>>() == mem::size_of::<i32>());
34};