Skip to main content

s3s/http/
request.rs

1use super::Body;
2use super::Multipart;
3use super::OrderedQs;
4
5use crate::HttpRequest;
6use crate::auth::Credentials;
7use crate::path::S3Path;
8use crate::post_policy::PostPolicy;
9use crate::protocol::TrailingHeaders;
10use crate::region::Region;
11use crate::stream::VecByteStream;
12
13use hyper::HeaderMap;
14use hyper::Method;
15use hyper::Uri;
16use hyper::http::Extensions;
17
18pub struct Request {
19    pub version: http::Version,
20    pub method: Method,
21    pub uri: Uri,
22    pub headers: HeaderMap,
23    pub extensions: Extensions,
24    pub body: Body,
25    pub(crate) s3ext: S3Extensions,
26}
27
28#[derive(Default)]
29pub(crate) struct S3Extensions {
30    pub s3_path: Option<S3Path>,
31    pub qs: Option<OrderedQs>,
32
33    pub multipart: Option<Multipart>,
34    pub vec_stream: Option<VecByteStream>,
35
36    pub credentials: Option<Credentials>,
37    pub region: Option<Region>,
38    pub service: Option<String>,
39    pub trailing_headers: Option<TrailingHeaders>,
40
41    pub post_policy: Option<PostPolicy>,
42}
43
44impl From<HttpRequest> for Request {
45    fn from(req: HttpRequest) -> Self {
46        let (parts, body) = req.into_parts();
47        Self {
48            version: parts.version,
49            method: parts.method,
50            uri: parts.uri,
51            headers: parts.headers,
52            extensions: parts.extensions,
53            body,
54            s3ext: S3Extensions::default(),
55        }
56    }
57}