use std::future::Future;
use std::net::SocketAddr;
use hotaru_core::MaybeSend;
use hotaru_core::protocol::Channel;
use crate::message::request::HttpRequest;
use crate::message::response::HttpResponse;
use crate::protocol::error::HttpError;
use crate::security::safety::HttpSafety;
pub trait HttpChannel: Channel {
fn parse_request(
&self,
safety: &HttpSafety,
) -> impl Future<Output = Result<HttpRequest, HttpError>> + MaybeSend;
fn send_response(
&self,
response: HttpResponse,
) -> impl Future<Output = Result<(), HttpError>> + MaybeSend;
fn send_request(
&self,
request: HttpRequest,
) -> impl Future<Output = Result<(), HttpError>> + MaybeSend;
fn parse_response(
&self,
safety: &HttpSafety,
) -> impl Future<Output = Result<HttpResponse, HttpError>> + MaybeSend;
fn local_addr(&self) -> Option<SocketAddr>;
fn remote_addr(&self) -> Option<SocketAddr>;
}