redirectionio 2.5.2

Redirection IO Library to handle matching rule, redirect and filtering headers and body.
mod header;
mod host;
mod ip;
mod matcher_tree_storage;
mod method;
mod path_and_query;
mod route_matcher;
mod scheme;

use crate::http::Request;
use crate::router::{Route, RouteData, Trace};
use std::fmt::Debug;

pub use header::{HeaderMatcher, ValueCondition as HeaderValueCondition};
pub use host::HostMatcher;
pub use ip::IpMatcher;
pub use method::MethodMatcher;
pub use path_and_query::PathAndQueryMatcher;
pub use route_matcher::RouteMatcher;
pub use scheme::SchemeMatcher;

pub trait RequestMatcher<T: RouteData>: Debug + Send + Sync {
    fn insert(&mut self, route: Route<T>);

    fn remove(&mut self, id: &str) -> bool;

    fn match_request(&self, request: &Request) -> Vec<&Route<T>>;

    fn trace(&self, request: &Request) -> Vec<Trace<T>>;

    fn cache(&mut self, limit: u64, level: u64) -> u64;

    fn len(&self) -> usize;

    fn is_empty(&self) -> bool;

    fn box_clone(&self) -> Box<dyn RequestMatcher<T>>;
}

impl<T: RouteData> Clone for Box<dyn RequestMatcher<T>> {
    fn clone(&self) -> Self {
        self.box_clone()
    }
}