embassy_socket/
socket_build.rs

1use core::net::Ipv4Addr;
2use embassy_net::Stack;
3use crate::connection::socket_state::SocketState;
4use crate::tcp_client::callback::TcpClientCallBack;
5use crate::tcp_client::TcpClient;
6use crate::tcp_server::callback::TcpServerCallBack;
7use crate::tcp_server::TcpServer;
8
9/// socket builder trait, let stack build tcp client or tcp server
10pub trait SocketBuilderTrait<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const BUF_SIZE: usize> {
11    /// build tcp client
12    fn build_tcp_client<CB: TcpClientCallBack>(self, ip: Ipv4Addr, port: u16, cb: CB, state: &'d SocketState<N, TX_SZ, RX_SZ, BUF_SIZE>) -> TcpClient<'d, N, TX_SZ, RX_SZ, BUF_SIZE, CB>;
13
14    /// build tcp server
15    fn build_tcp_server<CB: TcpServerCallBack>(self, state: &'d SocketState<N, TX_SZ, RX_SZ, BUF_SIZE>, port: u16, cb: &'d CB) -> TcpServer<'d, N, TX_SZ, RX_SZ, BUF_SIZE, CB>;
16}
17
18/// support socket to build tcp client/server
19impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const BUF_SIZE: usize>
20SocketBuilderTrait<'d, N, TX_SZ, RX_SZ, BUF_SIZE>
21for Stack<'d> {
22    #[inline]
23    fn build_tcp_client<CB: TcpClientCallBack>(
24        self, ip: Ipv4Addr, port: u16, cb: CB, state: &'d SocketState<N, TX_SZ, RX_SZ, BUF_SIZE>)
25        -> TcpClient<'d, N, TX_SZ, RX_SZ, BUF_SIZE, CB> {
26        TcpClient::new(self, ip, port, cb, state)
27    }
28
29    #[inline]
30    fn build_tcp_server<CB: TcpServerCallBack>(
31        self, state: &'d SocketState<N, TX_SZ, RX_SZ, BUF_SIZE>, port: u16, cb: &'d CB)
32        -> TcpServer<'d, N, TX_SZ, RX_SZ, BUF_SIZE, CB> {
33        TcpServer::new(self, state, port, cb)
34    }
35}