satex-core 0.2.1

Satex核心库,提供基础和通用的一些功能。
Documentation
use hyper::header::{HeaderName, HeaderValue};
use hyper::{HeaderMap, Method, StatusCode};

use crate::serde_with;

serde_with!(
    StatusCode,
    "http_serde::status_code",
    [Debug, Clone, PartialEq, Eq, Hash]
);

serde_with!(
    Method,
    "http_serde::method",
    [Debug, Clone, PartialEq, Eq, Hash]
);

serde_with!(HeaderMap, "http_serde::header_map", [Debug, Clone]);

serde_with!(
    HeaderName,
    "header_name",
    [Debug, Clone, Eq, PartialEq, Hash]
);

serde_with!(HeaderValue, "header_value", [Debug, Clone, Hash]);

pub mod header_name {
    use std::str::FromStr;

    use hyper::http::HeaderName;
    use serde::{Deserialize, Deserializer, Serializer};

    pub fn serialize<S: Serializer>(
        header_name: &HeaderName,
        serializer: S,
    ) -> Result<S::Ok, S::Error> {
        serializer.serialize_str(header_name.as_str())
    }

    pub fn deserialize<'de, D>(deserializer: D) -> Result<HeaderName, D::Error>
    where
        D: Deserializer<'de>,
    {
        let header_name = String::deserialize(deserializer)?;
        HeaderName::from_str(&header_name).map_err(serde::de::Error::custom)
    }
}

pub mod header_value {
    use hyper::http::HeaderValue;
    use serde::{Deserialize, Deserializer, Serializer};

    pub fn serialize<S: Serializer>(
        header_value: &HeaderValue,
        serializer: S,
    ) -> Result<S::Ok, S::Error> {
        serializer.serialize_bytes(header_value.as_bytes())
    }

    pub fn deserialize<'de, D>(deserializer: D) -> Result<HeaderValue, D::Error>
    where
        D: Deserializer<'de>,
    {
        let header_value = String::deserialize(deserializer)?;
        HeaderValue::from_str(&header_value).map_err(serde::de::Error::custom)
    }
}