use core::time::Duration;
use http::uri::{Authority, PathAndQuery, Scheme};
use http::{HeaderMap, Method};
use crate::engine::wasi::http::{IncomingBody, OutgoingBody};
use crate::engine::WithChildren;
pub type IncomingRequest = Request<IncomingBody>;
pub type OutgoingRequest = Request<OutgoingBody>;
#[derive(Clone, Debug, Default)]
pub struct RequestOptions {
pub connect_timeout: Option<Duration>,
pub first_byte_timeout: Option<Duration>,
pub between_bytes_timeout: Option<Duration>,
}
#[derive(Debug)]
pub struct Request<T> {
pub method: Method,
pub scheme: Option<Scheme>,
pub authority: Option<Authority>,
pub path_with_query: Option<PathAndQuery>,
pub headers: WithChildren<HeaderMap>,
pub(crate) body: Option<T>,
}
impl Request<IncomingBody> {
pub fn new(
method: Method,
scheme: Option<Scheme>,
authority: Option<Authority>,
path_with_query: Option<PathAndQuery>,
headers: HeaderMap,
body: impl Into<IncomingBody>,
) -> Self {
Self {
method,
scheme,
authority,
path_with_query,
headers: WithChildren::new(headers),
body: Some(body.into()),
}
}
}