@@ -15,26 +15,26 @@ use crate::s3::error::Error;
15
15
use crate :: s3:: response:: a_response_traits:: HasS3Fields ;
16
16
use crate :: s3:: types:: { FromS3Response , ListEntry , S3Request } ;
17
17
use crate :: s3:: utils:: xml:: { Element , MergeXmlElements } ;
18
- use crate :: s3:: utils:: { from_iso8601utc, parse_tags, urldecode } ;
18
+ use crate :: s3:: utils:: { from_iso8601utc, parse_tags, url_decode } ;
19
19
use async_trait:: async_trait;
20
20
use bytes:: { Buf , Bytes } ;
21
21
use reqwest:: header:: HeaderMap ;
22
22
use std:: collections:: HashMap ;
23
23
use std:: mem;
24
24
25
- fn url_decode (
25
+ fn url_decode_w_enc (
26
26
encoding_type : & Option < String > ,
27
- prefix : Option < String > ,
27
+ s : Option < String > ,
28
28
) -> Result < Option < String > , Error > {
29
29
if let Some ( v) = encoding_type. as_ref ( ) {
30
30
if v == "url" {
31
- if let Some ( v ) = prefix {
32
- return Ok ( Some ( urldecode ( & v ) ? . to_string ( ) ) ) ;
31
+ if let Some ( raw ) = s {
32
+ return Ok ( Some ( url_decode ( & raw ) . to_string ( ) ) ) ;
33
33
}
34
34
}
35
35
}
36
36
37
- if let Some ( v) = prefix . as_ref ( ) {
37
+ if let Some ( v) = s . as_ref ( ) {
38
38
return Ok ( Some ( v. to_string ( ) ) ) ;
39
39
}
40
40
@@ -56,7 +56,7 @@ fn parse_common_list_objects_response(
56
56
Error ,
57
57
> {
58
58
let encoding_type = root. get_child_text ( "EncodingType" ) ;
59
- let prefix = url_decode (
59
+ let prefix = url_decode_w_enc (
60
60
& encoding_type,
61
61
Some ( root. get_child_text ( "Prefix" ) . unwrap_or_default ( ) ) ,
62
62
) ?;
@@ -90,7 +90,7 @@ fn parse_list_objects_contents(
90
90
let merged = MergeXmlElements :: new ( & children1, & children2) ;
91
91
for content in merged {
92
92
let etype = encoding_type. as_ref ( ) . cloned ( ) ;
93
- let key = url_decode ( & etype, Some ( content. get_child_text_or_error ( "Key" ) ?) ) ?. unwrap ( ) ;
93
+ let key = url_decode_w_enc ( & etype, Some ( content. get_child_text_or_error ( "Key" ) ?) ) ?. unwrap ( ) ;
94
94
let last_modified = Some ( from_iso8601utc (
95
95
& content. get_child_text_or_error ( "LastModified" ) ?,
96
96
) ?) ;
@@ -156,7 +156,7 @@ fn parse_list_objects_common_prefixes(
156
156
) -> Result < ( ) , Error > {
157
157
for ( _, common_prefix) in root. get_matching_children ( "CommonPrefixes" ) {
158
158
contents. push ( ListEntry {
159
- name : url_decode (
159
+ name : url_decode_w_enc (
160
160
encoding_type,
161
161
Some ( common_prefix. get_child_text_or_error ( "Prefix" ) ?) ,
162
162
) ?
@@ -214,8 +214,8 @@ impl FromS3Response for ListObjectsV1Response {
214
214
let root = Element :: from ( & xmltree_root) ;
215
215
let ( name, encoding_type, prefix, delimiter, is_truncated, max_keys) =
216
216
parse_common_list_objects_response ( & root) ?;
217
- let marker = url_decode ( & encoding_type, root. get_child_text ( "Marker" ) ) ?;
218
- let mut next_marker = url_decode ( & encoding_type, root. get_child_text ( "NextMarker" ) ) ?;
217
+ let marker = url_decode_w_enc ( & encoding_type, root. get_child_text ( "Marker" ) ) ?;
218
+ let mut next_marker = url_decode_w_enc ( & encoding_type, root. get_child_text ( "NextMarker" ) ) ?;
219
219
let mut contents: Vec < ListEntry > = Vec :: new ( ) ;
220
220
parse_list_objects_contents ( & mut contents, & root, "Contents" , & encoding_type, false ) ?;
221
221
if is_truncated && next_marker. is_none ( ) {
@@ -281,7 +281,7 @@ impl FromS3Response for ListObjectsV2Response {
281
281
. get_child_text ( "KeyCount" )
282
282
. map ( |x| x. parse :: < u16 > ( ) )
283
283
. transpose ( ) ?;
284
- let start_after = url_decode ( & encoding_type, root. get_child_text ( "StartAfter" ) ) ?;
284
+ let start_after = url_decode_w_enc ( & encoding_type, root. get_child_text ( "StartAfter" ) ) ?;
285
285
let continuation_token = root. get_child_text ( "ContinuationToken" ) ;
286
286
let next_continuation_token = root. get_child_text ( "NextContinuationToken" ) ;
287
287
let mut contents: Vec < ListEntry > = Vec :: new ( ) ;
@@ -344,8 +344,9 @@ impl FromS3Response for ListObjectVersionsResponse {
344
344
let root = Element :: from ( & xmltree_root) ;
345
345
let ( name, encoding_type, prefix, delimiter, is_truncated, max_keys) =
346
346
parse_common_list_objects_response ( & root) ?;
347
- let key_marker = url_decode ( & encoding_type, root. get_child_text ( "KeyMarker" ) ) ?;
348
- let next_key_marker = url_decode ( & encoding_type, root. get_child_text ( "NextKeyMarker" ) ) ?;
347
+ let key_marker = url_decode_w_enc ( & encoding_type, root. get_child_text ( "KeyMarker" ) ) ?;
348
+ let next_key_marker =
349
+ url_decode_w_enc ( & encoding_type, root. get_child_text ( "NextKeyMarker" ) ) ?;
349
350
let version_id_marker = root. get_child_text ( "VersionIdMarker" ) ;
350
351
let next_version_id_marker = root. get_child_text ( "NextVersionIdMarker" ) ;
351
352
let mut contents: Vec < ListEntry > = Vec :: new ( ) ;
0 commit comments