hoslo commented on code in PR #3815:
URL: 
https://github.com/apache/incubator-opendal/pull/3815#discussion_r1435927263


##########
core/src/raw/http_util/header.rs:
##########
@@ -65,139 +55,70 @@ pub fn parse_location(headers: &HeaderMap) -> 
Result<Option<&str>> {
 /// The returned value is the raw string of `cache-control` header,
 /// maybe `no-cache`, `max-age=3600`, etc.
 pub fn parse_cache_control(headers: &HeaderMap) -> Result<Option<&str>> {
-    match headers.get(CACHE_CONTROL) {
-        None => Ok(None),
-        Some(v) => Ok(Some(v.to_str().map_err(|e| {
-            Error::new(
-                ErrorKind::Unexpected,
-                "header value has to be valid utf-8 string",
-            )
-            .with_operation("http_util::parse_cache_control")
-            .set_source(e)
-        })?)),
-    }
+    parse_header_to_str(headers, CACHE_CONTROL)
+        .map_err(|e| e.with_operation("http_util::parse_cache_control"))
 }
 
 /// Parse content length from header map.
 pub fn parse_content_length(headers: &HeaderMap) -> Result<Option<u64>> {
-    match headers.get(CONTENT_LENGTH) {
-        None => Ok(None),
-        Some(v) => Ok(Some(
-            v.to_str()
-                .map_err(|e| {
-                    Error::new(
-                        ErrorKind::Unexpected,
-                        "header value is not valid utf-8 string",
-                    )
-                    .with_operation("http_util::parse_content_length")
-                    .set_source(e)
-                })?
-                .parse::<u64>()
-                .map_err(|e| {
-                    Error::new(ErrorKind::Unexpected, "header value is not 
valid integer")
-                        .with_operation("http_util::parse_content_length")
-                        .set_source(e)
-                })?,
-        )),
-    }
+    let v = parse_header_to_str(headers, CONTENT_LENGTH)
+        .map_err(|e| e.with_operation("http_util::parse_content_length"))?
+        .ok_or(Error::new(
+            ErrorKind::Unexpected,
+            &format!("{} header is missing", CONTENT_LENGTH),
+        ))?;
+
+    Ok(Some(v.parse::<u64>().map_err(|e| {
+        Error::new(ErrorKind::Unexpected, "header value is not valid integer")
+            .with_operation("http_util::parse_content_length")
+            .set_source(e)
+    })?))
 }
 
 /// Parse content md5 from header map.
 pub fn parse_content_md5(headers: &HeaderMap) -> Result<Option<&str>> {
-    match headers.get(HeaderName::from_static("content-md5")) {
-        None => Ok(None),
-        Some(v) => Ok(Some(v.to_str().map_err(|e| {
-            Error::new(
-                ErrorKind::Unexpected,
-                "header value is not valid utf-8 string",
-            )
-            .with_operation("http_util::parse_content_md5")
-            .set_source(e)
-        })?)),
-    }
+    parse_header_to_str(headers, "content-md5")
+        .map_err(|e| e.with_operation("http_util::parse_content_md5"))
 }
 
 /// Parse content type from header map.
 pub fn parse_content_type(headers: &HeaderMap) -> Result<Option<&str>> {
-    match headers.get(CONTENT_TYPE) {
-        None => Ok(None),
-        Some(v) => Ok(Some(v.to_str().map_err(|e| {
-            Error::new(
-                ErrorKind::Unexpected,
-                "header value is not valid utf-8 string",
-            )
-            .with_operation("http_util::parse_content_type")
-            .set_source(e)
-        })?)),
-    }
+    parse_header_to_str(headers, CONTENT_TYPE)
+        .map_err(|e| e.with_operation("http_util::parse_content_type"))
 }
 
 /// Parse content range from header map.
 pub fn parse_content_range(headers: &HeaderMap) -> 
Result<Option<BytesContentRange>> {
-    match headers.get(CONTENT_RANGE) {
-        None => Ok(None),
-        Some(v) => Ok(Some(
-            v.to_str()
-                .map_err(|e| {
-                    Error::new(
-                        ErrorKind::Unexpected,
-                        "header value is not valid utf-8 string",
-                    )
-                    .with_operation("http_util::parse_content_range")
-                    .set_source(e)
-                })?
-                .parse()?,
-        )),
-    }
+    let v = parse_header_to_str(headers, CONTENT_RANGE)
+        .map_err(|e| e.with_operation("http_util::parse_content_range"))?
+        .ok_or(Error::new(
+            ErrorKind::Unexpected,
+            &format!("{} header is missing", LAST_MODIFIED),
+        ))?;
+
+    Ok(Some(v.parse()?))
 }
 
 /// Parse last modified from header map.
 pub fn parse_last_modified(headers: &HeaderMap) -> 
Result<Option<DateTime<Utc>>> {
-    match headers.get(LAST_MODIFIED) {
-        None => Ok(None),
-        Some(v) => {
-            let v = v.to_str().map_err(|e| {
-                Error::new(
-                    ErrorKind::Unexpected,
-                    "header value is not valid utf-8 string",
-                )
-                .with_operation("http_util::parse_last_modified")
-                .set_source(e)
-            })?;
-
-            Ok(Some(parse_datetime_from_rfc2822(v)?))
-        }
-    }
+    let v = parse_header_to_str(headers, LAST_MODIFIED)
+        .map_err(|e| e.with_operation("http_util::parse_content_disposition"))?
+        .ok_or(Error::new(
+            ErrorKind::Unexpected,
+            &format!("{} header is missing", LAST_MODIFIED),

Review Comment:
   Thanks, fixed



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to