Skip to main content

dope_core/driver/
bootstrap.rs

1use std::io;
2use std::net::SocketAddr;
3
4use crate::backend::Backend;
5use crate::backend::ops::bootstrap::BootstrapBackend;
6use crate::io::fd::Fd;
7use crate::io::socket::ListenerConfig;
8
9use super::DriverContext;
10
11pub trait Bootstrap<'d> {
12    fn bind_listener_slot(
13        &mut self,
14        addr: SocketAddr,
15        backlog: i32,
16        config: &ListenerConfig,
17    ) -> io::Result<(Fd<'d>, SocketAddr)>;
18    fn bind_datagram_slot(&mut self, addr: SocketAddr) -> io::Result<(Fd<'d>, SocketAddr)>;
19}
20
21impl<'d> Bootstrap<'d> for DriverContext<'_, 'd> {
22    fn bind_listener_slot(
23        &mut self,
24        addr: SocketAddr,
25        backlog: i32,
26        config: &ListenerConfig,
27    ) -> io::Result<(Fd<'d>, SocketAddr)> {
28        <Backend as BootstrapBackend>::bind_listener_slot(self, addr, backlog, config)
29    }
30
31    fn bind_datagram_slot(&mut self, addr: SocketAddr) -> io::Result<(Fd<'d>, SocketAddr)> {
32        <Backend as BootstrapBackend>::bind_datagram_slot(self, addr)
33    }
34}