1use capsec_core::cap::Cap;
6use capsec_core::cap_provider::CapProvider;
7use capsec_core::error::CapSecError;
8use capsec_core::permission::{NetBind, NetConnect};
9use std::net::{TcpListener, TcpStream, UdpSocket};
10
11pub fn tcp_connect(
14 addr: &str,
15 cap: &impl CapProvider<NetConnect>,
16) -> Result<TcpStream, CapSecError> {
17 let _proof: Cap<NetConnect> = cap.provide_cap(addr)?;
18 Ok(TcpStream::connect(addr)?)
19}
20
21pub fn tcp_bind(addr: &str, cap: &impl CapProvider<NetBind>) -> Result<TcpListener, CapSecError> {
24 let _proof: Cap<NetBind> = cap.provide_cap(addr)?;
25 Ok(TcpListener::bind(addr)?)
26}
27
28pub fn udp_bind(addr: &str, cap: &impl CapProvider<NetBind>) -> Result<UdpSocket, CapSecError> {
31 let _proof: Cap<NetBind> = cap.provide_cap(addr)?;
32 Ok(UdpSocket::bind(addr)?)
33}