= cowboy_req:match_qs(3)

== Name

cowboy_req:match_qs - Match the query string against constraints

== Description

[source,erlang]
----
match_qs(Fields :: cowboy:fields(), Req :: cowboy_req:req())
    -> #{atom() => any()}
----

Parse the query string and match specific values against
constraints.

This function allows easily retrieving expected values
from the query string, validating and converting them
in one call. In addition, the keys are converted to
atoms, making manipulation that much simpler.

== Arguments

Fields::

Fields to retrieve from the query string.
+
See link:man:cowboy(3)[cowboy(3)] for a complete description.

Req::

The Req object.

== Return value

Desired values are returned as a map. The key is the atom
that was given in the list of fields, and the value is the
optionally converted value after applying constraints.

The map contains the same keys that were given in the fields.

An exception is triggered when the match fails.

== Changelog

* *2.0*: Function introduced.

== Examples

.Match fields
[source,erlang]
----
%% ID and Lang are binaries.
#{id := ID, lang := Lang}
    = cowboy_req:match_qs([id, lang], Req).
----

.Match fields and apply constraints
[source,erlang]
----
%% ID is an integer and Lang a non-empty binary.
#{id := ID, lang := Lang}
    = cowboy_req:match_qs([{id, int}, {lang, nonempty}], Req).
----

.Match fields with default values
[source,erlang]
----
#{lang := Lang}
    = cowboy_req:match_qs([{lang, [], <<"en-US">>}], Req).
----

== See also

link:man:cowboy_req(3)[cowboy_req(3)],
link:man:cowboy_req:qs(3)[cowboy_req:qs(3)],
link:man:cowboy_req:parse_qs(3)[cowboy_req:parse_qs(3)]
