use capsec_core::cap::Cap;
use capsec_core::cap_provider::CapProvider;
use capsec_core::error::CapSecError;
use capsec_core::permission::{NetBind, NetConnect};
use std::net::{TcpListener, TcpStream, UdpSocket};
pub fn tcp_connect(
addr: &str,
cap: &impl CapProvider<NetConnect>,
) -> Result<TcpStream, CapSecError> {
let _proof: Cap<NetConnect> = cap.provide_cap(addr)?;
Ok(TcpStream::connect(addr)?)
}
pub fn tcp_bind(addr: &str, cap: &impl CapProvider<NetBind>) -> Result<TcpListener, CapSecError> {
let _proof: Cap<NetBind> = cap.provide_cap(addr)?;
Ok(TcpListener::bind(addr)?)
}
pub fn udp_bind(addr: &str, cap: &impl CapProvider<NetBind>) -> Result<UdpSocket, CapSecError> {
let _proof: Cap<NetBind> = cap.provide_cap(addr)?;
Ok(UdpSocket::bind(addr)?)
}