1use super::{Route, Captures};
2
3use http::Request;
4
5#[derive(Debug)]
10pub struct RouteSet<T> {
11 routes: Vec<Route<T>>,
12}
13
14impl<T> RouteSet<T> {
17 pub fn new() -> RouteSet<T> {
19 RouteSet { routes: vec![] }
20 }
21
22 pub(crate) fn map<F, U>(self, f: F) -> RouteSet<U>
23 where F: Fn(T) -> U,
24 {
25 RouteSet {
26 routes: self.routes.into_iter().map(|r| r.map(&f)).collect()
27 }
28 }
29
30 pub(crate) fn insert(&mut self, route: Route<T>) {
31 self.routes.push(route);
32 }
33
34 pub(crate) fn insert_all(&mut self, set: RouteSet<T>) {
35 self.routes.extend(set.routes);
36 }
37}
38
39impl<T> RouteSet<T>
40where
41 T: Clone,
42{
43 pub(crate) fn test(&self, request: &Request<()>) -> Option<(T, Captures)> {
45 self.routes
46 .iter()
47 .flat_map(|route| route.test(request))
48 .next()
49 }
50}