aiway-protocol 0.2.1

The aiway protocol lib
Documentation
use http::{request, response, Uri};

#[derive(Debug, serde::Serialize, serde::Deserialize)]
pub struct SerdeParts {
    #[serde(with = "http_serde::option::method")]
    pub method: Option<http::Method>,

    #[serde(with = "http_serde::option::status_code")]
    pub status_code: Option<http::StatusCode>,

    #[serde(with = "http_serde::option::uri")]
    pub uri: Option<Uri>,

    #[serde(with = "http_serde::option::header_map")]
    pub headers: Option<http::HeaderMap>,

    #[serde(with = "http_serde::option::authority")]
    pub authority: Option<http::uri::Authority>,
}

impl From<&request::Parts> for SerdeParts {
    fn from(parts: &request::Parts) -> Self {
        Self {
            method: parts.method.clone().into(),
            status_code: None,
            uri: parts.uri.clone().into(),
            headers: parts.headers.clone().into(),
            authority: parts.uri.authority().clone().cloned(),
        }
    }
}

impl From<&response::Parts> for SerdeParts {
    fn from(parts: &response::Parts) -> Self {
        Self {
            method: None,
            status_code: parts.status.clone().into(),
            uri: None,
            headers: parts.headers.clone().into(),
            authority: None,
        }
    }
}