so, i want to use actix-web to write a web backend. some of the endpoints need to accept query parameters (the ?part=of&the=url&that=looks&like=this). According to the actix-web docs, I should specify a struct that contains all the fields that could possibly occur, in order for actix to accept that request.
Unfortunately, i need to implement an already-existing API here, and there are many query fields i'll never need to read, and it's subject to ongoing change, so i'd rather not do that.
Is there a way to not have to statically specify all the fields and instead use a catch-all and get all the query parameters as a HashMap<&str, &str> or something like that?
the second one seems to preserve the order of arguments, is there a way to be sure of that?
Edit: additional note for anyone finding this via a search engine, it's also possible to use HttpRequest as an extractor, which we can use to get everything else manually:
async fn index(req : HttpRequest) -> impl Responder {
// e.g. you can now get the query string via
req.query_string();
// or even get the client's ip address like so
req.connection_info().remote_addr();
}
I think it's safe to rely on that. The Actix documentation mentions that it uses serde_urlencoded, which contains tests that assert the order of a deserialized Vec<(String, String)>.