1#[cfg(feature = "__compress")]
11pub use actix_http::encoding::Decoder as Decompress;
12pub use actix_http::{Extensions, Payload, RequestHead, Response, ResponseHead};
13use actix_router::Patterns;
14pub use actix_router::{Path, ResourceDef, ResourcePath, Url};
15pub use actix_server::{Server, ServerHandle};
16pub use actix_service::{
17    always_ready, fn_factory, fn_service, forward_ready, Service, ServiceFactory, Transform,
18};
19
20#[doc(hidden)]
21pub use crate::handler::Handler;
22pub use crate::{
23    config::{AppConfig, AppService},
24    info::{ConnectionInfo, PeerAddr},
25    rmap::ResourceMap,
26    service::{HttpServiceFactory, ServiceRequest, ServiceResponse, WebService},
27    types::{JsonBody, Readlines, UrlEncoded},
28};
29
30pub(crate) fn ensure_leading_slash(mut patterns: Patterns) -> Patterns {
31    match &mut patterns {
32        Patterns::Single(pat) => {
33            if !pat.is_empty() && !pat.starts_with('/') {
34                pat.insert(0, '/');
35            };
36        }
37        Patterns::List(pats) => {
38            for pat in pats {
39                if !pat.is_empty() && !pat.starts_with('/') {
40                    pat.insert(0, '/');
41                };
42            }
43        }
44    }
45
46    patterns
47}