use std::borrow::Cow;
use derive_more::{Deref, Display, From, FromStr};
use schemars::JsonSchema;
use serde::de::Deserializer;
use serde::{Deserialize, Serialize};
use crate::Validate;
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deref, From, FromStr, Display)]
pub struct HeaderName(http::HeaderName);
impl<'de> Deserialize<'de> for HeaderName {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
s.parse().map_err(serde::de::Error::custom)
}
}
impl Serialize for HeaderName {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.0.as_str().serialize(serializer)
}
}
impl JsonSchema for HeaderName {
fn schema_name() -> Cow<'static, str> {
Cow::Borrowed("HeaderName")
}
fn json_schema(generator: &mut schemars::SchemaGenerator) -> schemars::Schema {
String::json_schema(generator)
}
}
impl Validate for HeaderName {}
impl PartialEq<str> for HeaderName {
fn eq(&self, other: &str) -> bool {
self.0 == other
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deref, From, FromStr)]
pub struct HeaderValue(http::HeaderValue);
impl<'de> Deserialize<'de> for HeaderValue {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
s.parse().map_err(serde::de::Error::custom)
}
}
impl Serialize for HeaderValue {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.0
.to_str()
.map_err(serde::ser::Error::custom)?
.serialize(serializer)
}
}
impl JsonSchema for HeaderValue {
fn schema_name() -> Cow<'static, str> {
Cow::Borrowed("HeaderValue")
}
fn json_schema(generator: &mut schemars::SchemaGenerator) -> schemars::Schema {
String::json_schema(generator)
}
}
impl Validate for HeaderValue {}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deref, From, FromStr, Display)]
pub struct Method(http::Method);
impl<'de> Deserialize<'de> for Method {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
s.parse().map_err(serde::de::Error::custom)
}
}
impl Serialize for Method {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.0.as_str().serialize(serializer)
}
}
impl JsonSchema for Method {
fn schema_name() -> Cow<'static, str> {
Cow::Borrowed("Method")
}
fn json_schema(generator: &mut schemars::SchemaGenerator) -> schemars::Schema {
String::json_schema(generator)
}
}
impl Validate for Method {}
impl PartialEq<str> for Method {
fn eq(&self, other: &str) -> bool {
self.0 == other
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deref, From, FromStr, Display)]
pub struct Uri(http::Uri);
impl<'de> Deserialize<'de> for Uri {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
s.parse().map_err(serde::de::Error::custom)
}
}
impl Serialize for Uri {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.0.to_string().serialize(serializer)
}
}
impl JsonSchema for Uri {
fn schema_name() -> Cow<'static, str> {
Cow::Borrowed("Uri")
}
fn json_schema(generator: &mut schemars::SchemaGenerator) -> schemars::Schema {
String::json_schema(generator)
}
}
impl Validate for Uri {}