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    /// Other HTTP methods not explicitly enumerated
24    Other(Cow<'static, str>),
25}
26
27/// Represents an HTTP request to be sent by a nyquest client.
28pub struct Request<S> {
29    /// The HTTP method for this request
30    pub method: Method,
31    /// The URI for this request, can be absolute or relative
32    pub relative_uri: Cow<'static, str>,
33    /// Additional HTTP headers to include with this request
34    pub additional_headers: Vec<(Cow<'static, str>, Cow<'static, str>)>,
35    /// Optional request body
36    pub body: Option<Body<S>>,
37}
38
39impl<S> Debug for Request<S>
40where
41    Body<S>: Debug,
42{
43    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
44        f.debug_struct("Request")
45            .field("method", &self.method)
46            .field("relative_uri", &self.relative_uri)
47            .field("additional_headers", &self.additional_headers)
48            .field("body", &self.body)
49            .finish()
50    }
51}
52
53impl<S> Clone for Request<S>
54where
55    Body<S>: Clone,
56{
57    fn clone(&self) -> Self {
58        Self {
59            method: self.method.clone(),
60            relative_uri: self.relative_uri.clone(),
61            additional_headers: self.additional_headers.clone(),
62            body: self.body.clone(),
63        }
64    }
65}