Hi, I'm working with Warp, I'm trying to make a Filter from an array of Structs to make a chainable Ors (i.e. route_1.or(route_2).or(route_3)
) this way:
let routes = server_object.routes.iter().fold(None, |res: Option<dyn Filter>, (origin_route, destination_route)| {
let new_route = warp::path(origin_route).and(warp::fs::file(destination_route));
match res {
Some(route) => Some(route.or(new_route)),
None => new_route,
}
});
But It says that I must specify the size of the Option as the first iteration, when res
is None it returns an And struct but in the next iterations it returns an Or. I tried setting the type to:
Option<Box<dyn Filter<Extract = Reply, Error = Reject, Future = Rejection> + Clone + Send + Sync + 'static>>
Which is the type that expects the function serve, but the compiler says that
the trait
warp::reject::Reject
cannot be made into an object
I don't know how to continue. I just need to chain Or structs, maybe I'm complicating thing unnecesarily. Any kind of help would be really appreciated.
Thanks in advance