We have implemented an encode / decoder pattern for facet extraction of out the requests. This allows us to switch directly between your psr-7 parser and a Symfony form submit request
for example we replaced:
public function getSelectedValues(UriInterface $uri)
{
$queryParams = Psr7\parse_query($uri->getQuery());