use hyper::{header::HeaderMap, Method};
use serde::{Deserialize, Deserializer, Serialize};
use std::borrow::Cow;
pub enum RequestData<T> {
Empty,
Form(T),
Json(T),
Query(T),
}
impl<T> Default for RequestData<T> {
fn default() -> Self {
RequestData::Empty
}
}
pub trait Request: Send {
type Data: Serialize;
type Response: for<'de> Deserialize<'de>;
const METHOD: Method = Method::GET;
fn endpoint(&self) -> Cow<str>;
fn headers(&self) -> HeaderMap {
Default::default()
}
fn data(&self) -> RequestData<&Self::Data> {
Default::default()
}
}
#[derive(Debug)]
pub struct EmptyResponse;
impl<'de> Deserialize<'de> for EmptyResponse {
fn deserialize<D>(_deserializer: D) -> Result<EmptyResponse, D::Error>
where
D: Deserializer<'de>,
{
Ok(EmptyResponse {})
}
}