use crate::{Request, Response, Result};
use async_trait::async_trait;
use std::time::Duration;
pub mod udp;
pub mod tcp;
pub mod tls;
pub mod https;
pub use udp::UdpTransport;
pub use tcp::TcpTransport;
pub use tls::TlsTransport;
pub use https::HttpsTransport;
#[async_trait]
pub trait Transport: std::fmt::Debug + Send + Sync {
async fn send(&self, request: &Request) -> Result<Response>;
fn transport_type(&self) -> &'static str;
fn set_timeout(&mut self, timeout: Duration);
fn timeout(&self) -> Duration;
}
#[derive(Debug, Clone)]
pub struct TransportConfig {
pub server: String,
pub port: u16,
pub timeout: Duration,
pub tcp_fast_open: bool,
pub tcp_nodelay: bool,
pub pool_size: usize,
}
#[derive(Debug, Clone)]
pub struct HttpsConfig {
pub base: TransportConfig,
pub url: String,
pub method: HttpMethod,
pub user_agent: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum HttpMethod {
GET,
POST,
}
#[derive(Debug, Clone)]
pub struct TlsConfig {
pub base: TransportConfig,
pub server_name: String,
pub verify_cert: bool,
}