Skip to content

Commit 1927932

Browse files
committed
refactor: refactor prefixed headers parsing
1 parent 155bb1a commit 1927932

File tree

4 files changed

+24
-26
lines changed

4 files changed

+24
-26
lines changed

core/src/raw/http_util/header.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
// specific language governing permissions and limitations
1616
// under the License.
1717

18+
use std::collections::HashMap;
19+
1820
use base64::engine::general_purpose;
1921
use base64::Engine;
2022
use chrono::DateTime;
@@ -189,6 +191,21 @@ pub fn parse_into_metadata(path: &str, headers: &HeaderMap) -> Result<Metadata>
189191
Ok(m)
190192
}
191193

194+
/// Parse prefixed headers and return a map with the prefix of each header removed.
195+
pub fn parse_prefixed_headers(headers: &HeaderMap, prefix: &str) -> HashMap<String, String> {
196+
headers
197+
.iter()
198+
.filter_map(|(name, value)| {
199+
name.as_str().strip_prefix(prefix).and_then(|stripped_key| {
200+
value
201+
.to_str()
202+
.ok()
203+
.map(|parsed_value| (stripped_key.to_string(), parsed_value.to_string()))
204+
})
205+
})
206+
.collect()
207+
}
208+
192209
/// format content md5 header by given input.
193210
pub fn format_content_md5(bs: &[u8]) -> String {
194211
let mut hasher = md5::Md5::new();

core/src/raw/http_util/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ pub use header::parse_header_to_str;
4949
pub use header::parse_into_metadata;
5050
pub use header::parse_last_modified;
5151
pub use header::parse_location;
52+
pub use header::parse_prefixed_headers;
5253

5354
mod uri;
5455
pub use uri::percent_decode_path;

core/src/services/azblob/backend.rs

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ use sha2::Digest;
3434
use sha2::Sha256;
3535

3636
use super::core::constants;
37+
use super::core::constants::X_MS_META_NAME_PREFIX;
3738
use super::error::parse_error;
3839
use super::lister::AzblobLister;
3940
use super::writer::AzblobWriter;
@@ -550,23 +551,12 @@ impl Access for AzblobBackend {
550551
StatusCode::OK => {
551552
let headers = resp.headers();
552553
let mut meta = parse_into_metadata(path, headers)?;
553-
// TODO: Refactor in common with s3 metadata parsing
554-
// do the same as in parse_into_metadata... but for user metadata
555-
let user_meta: HashMap<String, String> = headers
556-
.iter()
557-
.filter_map(|(name, _)| {
558-
name.as_str()
559-
.strip_prefix(constants::X_MS_META_NAME_PREFIX)
560-
.and_then(|stripped_key| {
561-
parse_header_to_str(headers, name)
562-
.unwrap_or(None)
563-
.map(|val| (stripped_key.to_string(), val.to_string()))
564-
})
565-
})
566-
.collect();
554+
555+
let user_meta = parse_prefixed_headers(&headers, X_MS_META_NAME_PREFIX);
567556
if !user_meta.is_empty() {
568557
meta.with_user_metadata(user_meta);
569558
}
559+
570560
Ok(RpStat::new(meta))
571561
}
572562
_ => Err(parse_error(resp)),

core/src/services/s3/backend.rs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use std::sync::Arc;
2626
use base64::prelude::BASE64_STANDARD;
2727
use base64::Engine;
2828
use bytes::Buf;
29+
use constants::X_AMZ_META_PREFIX;
2930
use http::Response;
3031
use http::StatusCode;
3132
use log::debug;
@@ -970,18 +971,7 @@ impl Access for S3Backend {
970971
let headers = resp.headers();
971972
let mut meta = parse_into_metadata(path, headers)?;
972973

973-
let user_meta: HashMap<String, String> = headers
974-
.iter()
975-
.filter_map(|(name, _)| {
976-
name.as_str()
977-
.strip_prefix(constants::X_AMZ_META_PREFIX)
978-
.and_then(|stripped_key| {
979-
parse_header_to_str(headers, name)
980-
.unwrap_or(None)
981-
.map(|val| (stripped_key.to_string(), val.to_string()))
982-
})
983-
})
984-
.collect();
974+
let user_meta = parse_prefixed_headers(&headers, X_AMZ_META_PREFIX);
985975
if !user_meta.is_empty() {
986976
meta.with_user_metadata(user_meta);
987977
}

0 commit comments

Comments
 (0)