dope_core/io/socket/install/
receive.rs1use std::{marker, mem};
2
3use crate::{driver, driver::settings, io::transfer};
4
5pub(crate) struct Capacity<'d>(marker::PhantomData<driver::Reference<'d>>);
7
8#[derive(Clone, Copy, PartialEq, Eq, Debug)]
10pub struct Error {
11 actual: transfer::NonZero,
12 required: transfer::NonZero,
13}
14
15impl<'d> Capacity<'d> {
16 pub(in crate::io::socket::install) fn try_new(
17 driver: driver::Reference<'d>,
18 ) -> Result<Self, Error> {
19 let actual = driver.receive().layout().buffer_len();
20 let required = settings::Receive::MIN_DATAGRAM_SLOT;
21 if actual.into_nonzero() < required.into_nonzero() {
22 return Err(Error { actual, required });
23 }
24 Ok(Self(marker::PhantomData))
25 }
26}
27
28impl Error {
29 pub const fn actual(&self) -> transfer::NonZero {
30 self.actual
31 }
32
33 pub const fn required(&self) -> transfer::NonZero {
34 self.required
35 }
36}
37
38const _: () = {
39 assert!(mem::size_of::<Capacity<'static>>() == 0);
40 assert!(mem::align_of::<Capacity<'static>>() == 1);
41 assert!(mem::size_of::<Result<Capacity<'static>, Error>>() == mem::size_of::<Error>());
42};