pub mod manager;
pub mod pinning;
pub mod reconnect;
pub mod tcp;
pub mod timeout;
pub mod tls_tcp;
pub mod udp;
#[cfg(feature = "quic")]
pub mod quic;
#[cfg(feature = "websocket")]
pub mod websocket;
#[cfg(feature = "grpc")]
pub mod grpc;
#[cfg(feature = "http-tunnel")]
pub mod http;
use async_trait::async_trait;
use bytes::Bytes;
pub use manager::TransportManager;
pub use pinning::{CertPin, cert_sha256};
pub use reconnect::{ReconnectConfig, ReconnectingTransport};
pub use tcp::TcpTransport;
pub use timeout::TimeoutTransport;
pub use tls_tcp::TlsTcpTransport;
pub use udp::UdpTransport;
#[cfg(feature = "grpc")]
pub use grpc::{GrpcTransport, TunnelEcho, serve_tunnel_echo, serve_tunnel_echo_tls};
#[cfg(feature = "http-tunnel")]
pub use http::HttpTunnelTransport;
#[cfg(feature = "quic")]
pub use quic::{QuicStreamChannel, QuicTransport};
#[cfg(feature = "websocket")]
pub use websocket::WebSocketTransport;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum TransportKind {
Tcp,
Udp,
Quic,
WebSocket,
Grpc,
Http2,
}
#[async_trait]
pub trait Transport: Send + Sync {
fn kind(&self) -> TransportKind;
async fn send(&self, data: Bytes) -> crate::error::Result<()>;
async fn recv(&self) -> crate::error::Result<Bytes>;
async fn is_healthy(&self) -> bool;
async fn close(&self) -> crate::error::Result<()>;
}