1#![allow(
24 clippy::type_complexity,
25 clippy::too_many_arguments,
26 clippy::borrow_interior_mutable_const
27)]
28#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
29#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
30#![cfg_attr(docsrs, feature(doc_auto_cfg))]
31
32pub use http::{uri, uri::Uri, Method, StatusCode, Version};
33
34pub mod body;
35mod builder;
36mod config;
37mod date;
38#[cfg(feature = "__compress")]
39pub mod encoding;
40pub mod error;
41mod extensions;
42pub mod h1;
43#[cfg(feature = "http2")]
44pub mod h2;
45pub mod header;
46mod helpers;
47mod http_message;
48mod keep_alive;
49mod message;
50#[cfg(test)]
51mod notify_on_drop;
52mod payload;
53mod requests;
54mod responses;
55mod service;
56pub mod test;
57#[cfg(feature = "ws")]
58pub mod ws;
59
60#[allow(deprecated)]
61pub use self::payload::PayloadStream;
62#[cfg(feature = "__tls")]
63pub use self::service::TlsAcceptorConfig;
64pub use self::{
65 builder::HttpServiceBuilder,
66 config::ServiceConfig,
67 error::Error,
68 extensions::Extensions,
69 header::ContentEncoding,
70 http_message::HttpMessage,
71 keep_alive::KeepAlive,
72 message::{ConnectionType, Message},
73 payload::{BoxedPayloadStream, Payload},
74 requests::{Request, RequestHead, RequestHeadType},
75 responses::{Response, ResponseBuilder, ResponseHead},
76 service::HttpService,
77};
78
79#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
81#[non_exhaustive]
82pub enum Protocol {
83 Http1,
84 Http2,
85 Http3,
86}
87
88type ConnectCallback<IO> = dyn Fn(&IO, &mut Extensions);
89
90#[derive(Default)]
95pub(crate) struct OnConnectData(Option<Extensions>);
96
97impl OnConnectData {
98 pub(crate) fn from_io<T>(io: &T, on_connect_ext: Option<&ConnectCallback<T>>) -> Self {
100 let ext = on_connect_ext.map(|handler| {
101 let mut extensions = Extensions::default();
102 handler(io, &mut extensions);
103 extensions
104 });
105
106 Self(ext)
107 }
108}