#![cfg_attr(not(feature = "std"), no_std)]
#![cfg_attr(docsrs, feature(doc_cfg))]
#![forbid(unsafe_code)]
#![deny(missing_docs)]
#![deny(unused_must_use)]
#![deny(unused_results)]
#![deny(clippy::unwrap_used)]
#![deny(clippy::expect_used)]
#![deny(clippy::todo)]
#![deny(clippy::unimplemented)]
#![deny(clippy::print_stdout)]
#![deny(clippy::print_stderr)]
#![deny(clippy::dbg_macro)]
#![deny(clippy::unreachable)]
#![cfg_attr(test, allow(clippy::unwrap_used, clippy::expect_used))]
extern crate alloc;
mod body;
mod buffer;
mod chunked;
mod client;
mod date;
mod error;
mod forward;
mod head;
mod limits;
mod message;
mod method;
mod preface;
mod raw;
mod redact;
mod scan;
mod server;
pub mod status;
mod write;
#[cfg(feature = "std")]
#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
pub mod blocking;
pub use chunked::{ChunkStep, ChunkedDecoder};
pub use client::{ClientConn, ClientEvent, ClientLeniency};
pub use date::{DateCache, HttpDate};
pub use error::HttpError;
pub use forward::is_hop_by_hop;
pub use head::{
Asked, BodyFraming, FieldSpan, HeaderValues, Headers, ListElements, RequestHead, ResponseHead,
Span, TargetForm, Version,
};
pub use limits::Limits;
pub use message::{Request, Response};
pub use method::{Method, MethodSet};
pub use preface::is_h2_preface;
pub use raw::{
HeadFacts, OwnedRequestHead, Parsed, ParsedRequest, ParsedResponse, RawHead,
parse_request_head, parse_response_head,
};
pub use server::{Progress, ServerConn, ServerEvent};
pub use status::{StatusClass, reason_phrase, status_allows_body, status_class};
pub use write::{BodyPlan, OutgoingBody, Output, ResponseHeadRef};
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
#[cfg(all(doctest, feature = "std"))]
#[doc = include_str!("../README.md")]
struct ReadmeDoctests;
#[cfg(all(doctest, feature = "std"))]
#[doc = include_str!("../docs/API.md")]
struct ApiDoctests;
#[cfg(all(doctest, feature = "std"))]
#[doc = include_str!("../docs/MIGRATION.md")]
struct MigrationDoctests;
#[cfg(test)]
mod tests {
#[test]
fn test_public_types_are_send_and_sync() {
fn assert<T: Send + Sync>() {}
assert::<crate::ServerConn>();
assert::<crate::ServerEvent<'_>>();
assert::<crate::ClientConn>();
assert::<crate::ClientLeniency>();
assert::<crate::ClientEvent<'_>>();
assert::<crate::Response>();
assert::<crate::Request>();
assert::<crate::RequestHead<'_>>();
assert::<crate::ResponseHead<'_>>();
assert::<crate::Headers<'_>>();
assert::<crate::HeaderValues<'_, '_>>();
assert::<crate::HttpError>();
assert::<crate::Limits>();
assert::<crate::Method>();
assert::<crate::MethodSet>();
assert::<crate::Version>();
assert::<crate::BodyFraming>();
assert::<crate::TargetForm>();
assert::<crate::StatusClass>();
#[cfg(feature = "std")]
{
assert::<crate::blocking::Server>();
assert::<crate::blocking::ServerConfig>();
assert::<crate::blocking::ShutdownHandle>();
assert::<crate::blocking::Connection>();
assert::<crate::blocking::Incoming<'_>>();
assert::<crate::blocking::Upgraded>();
assert::<crate::blocking::Client>();
assert::<crate::blocking::ClientResponse>();
assert::<crate::blocking::Error>();
}
}
#[test]
fn test_version_matches_the_manifest() {
assert_eq!(crate::VERSION, env!("CARGO_PKG_VERSION"));
}
}