use super::*;
#[derive(Default)]
pub struct Builder {
pub(super) handle: Option<Handle>,
pub(super) socket: Option<UdpSocket>,
pub(super) addr: Option<Box<dyn turmoil::ToSocketAddrs + Send + Sync + 'static>>,
pub(super) mtu_config_builder: mtu::Builder,
}
impl Builder {
#[must_use]
pub fn with_handle(mut self, handle: Handle) -> Self {
self.handle = Some(handle);
self
}
pub fn with_address<A: turmoil::ToSocketAddrs + Send + Sync + 'static>(
mut self,
addr: A,
) -> io::Result<Self> {
debug_assert!(self.socket.is_none(), "socket has already been set");
self.addr = Some(Box::new(addr));
Ok(self)
}
pub fn with_socket(mut self, socket: UdpSocket) -> io::Result<Self> {
debug_assert!(self.addr.is_none(), "address has already been set");
self.socket = Some(socket);
Ok(self)
}
pub fn with_max_mtu(mut self, max_mtu: u16) -> io::Result<Self> {
self.mtu_config_builder = self
.mtu_config_builder
.with_max_mtu(max_mtu)
.map_err(|err| io::Error::new(ErrorKind::InvalidInput, format!("{err}")))?;
Ok(self)
}
pub fn build(self) -> io::Result<Io> {
Ok(Io { builder: self })
}
}