use std::sync::Arc;
use bytes::Bytes;
use tokio::sync::oneshot;
use crate::error::Result;
use crate::headers::Headers;
use crate::request::RequestBody;
use crate::transport::h3::body::H3BodyShared;
use crate::transport::h3::H3Tunnel;
pub type StreamingHeadersResult = Result<(u16, Headers)>;
#[derive(Debug)]
pub enum DriverCommand {
SendRequest {
method: http::Method,
uri: http::Uri,
headers: Headers,
body: Option<Bytes>,
response_tx: oneshot::Sender<Result<StreamResponse>>,
},
SendStreamingRequest {
method: http::Method,
uri: http::Uri,
headers: Headers,
body: RequestBody,
headers_tx: oneshot::Sender<StreamingHeadersResult>,
body_shared: Arc<H3BodyShared>,
},
OpenWebSocketTunnel {
uri: http::Uri,
headers: Vec<(String, String)>,
response_tx: oneshot::Sender<Result<H3Tunnel>>,
},
}
#[derive(Debug)]
pub struct StreamResponse {
pub status: u16,
pub headers: Vec<(String, String)>,
pub body: Bytes,
}