karyon_net/layer.rs
1use std::future::Future;
2
3use crate::Result;
4
5/// Client-side middleware layer. Upgrades an input via handshake.
6///
7/// Generic over input and output types:
8/// - `ClientLayer<Box<dyn ByteStream>, Box<dyn ByteStream>>` - TLS, SOCKS5, Noise
9/// - `ClientLayer<Box<dyn ByteStream>, WsConn<C>>` - WebSocket
10///
11/// # Example
12///
13/// ```no_run
14/// use karyon_net::{tcp, tls, ClientLayer, ByteStream, Endpoint};
15/// use karyon_net::tls::ClientTlsConfig;
16///
17/// async {
18/// let ep: Endpoint = "tcp://127.0.0.1:443".parse().unwrap();
19/// let stream = tcp::connect(&ep, Default::default()).await.unwrap();
20/// // let tls_stream: Box<dyn ByteStream> = ClientLayer::handshake(
21/// // &tls::TlsLayer::client(config), stream
22/// // ).await.unwrap();
23/// };
24/// ```
25pub trait ClientLayer<In, Out>: Send + Sync + Clone {
26 fn handshake(&self, input: In) -> impl Future<Output = Result<Out>> + Send;
27}
28
29/// Server-side middleware layer. Upgrades an accepted input via handshake.
30///
31/// Same generic pattern as `ClientLayer`.
32pub trait ServerLayer<In, Out>: Send + Sync + Clone {
33 fn handshake(&self, input: In) -> impl Future<Output = Result<Out>> + Send;
34}