1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
mod body;
#[cfg(feature = "download")]
mod download;
mod error;
mod extractor;
mod fs;
mod handler;
#[cfg(feature = "multipart")]
mod multipart;
mod regex;
mod request;
mod responder;
mod response;
mod router;
#[cfg(feature = "rustls")]
#[allow(dead_code)]
mod rustls;
mod serde_request;
mod server;
#[cfg(feature = "static_file")]
mod static_dir;
mod tokio_io;
#[allow(dead_code)]
mod tree;
mod types;
#[cfg(feature = "websocket")]
mod ws;

pub use async_trait::async_trait;
pub use body::HttpBody;
pub use extractor::{Extractor, Field, Metadata, RenameRule, Source, SourceFormat, SourceFrom};
pub use fs::NamedFile;
pub use futures;
pub use headers;
pub use hyper;
pub use once_cell;
pub use router::Controller;
pub use serde_json;
pub use serde_urlencoded;
pub use server::{listen, run};
pub use thiserror;

pub type Result<T = response::Response, E = error::Error> = std::result::Result<T, E>;

pub mod prelude {
    #[cfg(feature = "download")]
    pub use crate::download::DispositionType;
    #[cfg(feature = "rustls")]
    pub use crate::rustls::RustlsConfig;
    #[cfg(feature = "cookie")]
    pub use crate::types::cookie::CookieParam;
    #[cfg(feature = "websocket")]
    pub use crate::ws::WebSocketUpgrade;
    pub use crate::{
        error::Error,
        handler::{Handler, Next},
        handlers,
        request::Request,
        responder::Responder,
        response::Response,
        router::Router,
        types::{Form, Header, Json, Path, Query, Text},
        Result,
    };
    #[cfg(feature = "static_file")]
    pub use crate::{fs::StaticFile, static_dir::StaticDir};
    #[cfg(feature = "cookie")]
    pub use cookie::{Cookie, CookieJar};
    pub use hypers_macro::{
        connect, controller, delete, get, handler, head, options, patch, post, put, trace,
        Extractor,
    };
    pub use serde::{Deserialize, Serialize};
    pub use serde_json::json;
    #[cfg(feature = "native_tls")]
    pub use tokio_native_tls::native_tls::Identity as NativeTls;
    #[cfg(feature = "websocket")]
    pub use tokio_tungstenite::tungstenite::Message;
    #[cfg(feature = "validate")]
    pub use validator::Validate;
}

#[macro_export]
macro_rules! handlers {
    ($($items: expr),* $(,)?) => {
        vec![$(std::sync::Arc::new($items),)*]
    };
}