private function getEncodingTypeMiddleware()
{
return static function (callable $handler) {
return function (Command $command, $request = null) use($handler) {
$autoSet = false;
if ($command->getName() === 'ListObjects' && empty($command['EncodingType'])) {
$command['EncodingType'] = 'url';
$autoSet = true;
}
return $handler($command, $request)->then(function (ResultInterface $result) use($autoSet) {
if ($result['EncodingType'] === 'url' && $autoSet) {
static $topLevel = ['Delimiter', 'Marker', 'NextMarker', 'Prefix'];
static $nested = [['Contents', 'Key'], ['CommonPrefixes', 'Prefix']];
foreach ($topLevel as $key) {
if (isset($result[$key])) {
$result[$key] = urldecode($result[$key]);
}
}
foreach ($nested as $steps) {
if (isset($result[$steps[0]])) {
foreach ($result[$steps[0]] as &$part) {
if (isset($part[$steps[1]])) {
$part[$steps[1]] = urldecode($part[$steps[1]]);
}
}
}
}
}
return $result;
});
};
};
}