#![allow(unexpected_cfgs)]
#![cfg_attr(nightly, feature(doc_auto_cfg))]
#![deny(clippy::all)]
#![forbid(unsafe_code)]
#![deny(clippy::cargo)]
#![warn(missing_docs)]
#![deny(rustdoc::invalid_html_tags)]
#![warn(rustdoc::missing_doc_code_examples)]
#![warn(clippy::pedantic)]
#![warn(clippy::nursery)]
#![allow(clippy::tabs_in_doc_comments)]
use serde::de::DeserializeOwned;
#[cfg(feature = "reqwest")]
pub mod reqwest;
#[derive(Debug, Clone)]
pub enum RequestMethod {
Head,
Get,
Post,
Put,
Patch,
Delete,
}
pub trait Queryable<RequiredApiState, ResponseType: DeserializeOwned> {
fn url(&self, state: &RequiredApiState) -> String;
fn method(&self, _state: &RequiredApiState) -> RequestMethod {
RequestMethod::Get
}
fn body(
&self, _state: &RequiredApiState,
) -> Option<serde_json::Result<Vec<u8>>> {
None
}
fn deserialize(&self, data: &[u8]) -> serde_json::Result<ResponseType> {
serde_json::from_slice(data)
}
}
pub trait FromApiState<ApiState> {
fn from_state(state: &ApiState) -> &Self;
}