nyquest_interface/
request.rs

1//! HTTP request definitions for nyquest HTTP clients.
2//!
3//! This module provides the core request types used to construct and send
4//! HTTP requests through nyquest backends.
5
6use std::{borrow::Cow, fmt::Debug};
7
8use crate::body::Body;
9
10/// HTTP request methods supported by nyquest.
11#[derive(Debug, Clone, PartialEq, Eq, Hash)]
12pub enum Method {
13    /// HTTP GET method
14    Get,
15    /// HTTP POST method
16    Post,
17    /// HTTP PUT method
18    Put,
19    /// HTTP DELETE method
20    Delete,
21    /// HTTP PATCH method
22    Patch,
23    /// HTTP HEAD method
24    Head,
25    /// Other HTTP methods not explicitly enumerated
26    Other(Cow<'static, str>),
27}
28
29/// Represents an HTTP request to be sent by a nyquest client.
30pub struct Request<S> {
31    /// The HTTP method for this request
32    pub method: Method,
33    /// The URI for this request, can be absolute or relative
34    pub relative_uri: Cow<'static, str>,
35    /// Additional HTTP headers to include with this request
36    pub additional_headers: Vec<(Cow<'static, str>, Cow<'static, str>)>,
37    /// Optional request body
38    pub body: Option<Body<S>>,
39}
40
41impl<S> Debug for Request<S>
42where
43    Body<S>: Debug,
44{
45    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
46        f.debug_struct("Request")
47            .field("method", &self.method)
48            .field("relative_uri", &self.relative_uri)
49            .field("additional_headers", &self.additional_headers)
50            .field("body", &self.body)
51            .finish()
52    }
53}
54
55impl<S> Clone for Request<S>
56where
57    Body<S>: Clone,
58{
59    fn clone(&self) -> Self {
60        Self {
61            method: self.method.clone(),
62            relative_uri: self.relative_uri.clone(),
63            additional_headers: self.additional_headers.clone(),
64            body: self.body.clone(),
65        }
66    }
67}