use aws_smithy_runtime_api::http::Headers;
pub fn sanitize_error_code(error_code: &str) -> &str {
let error_code = match error_code.find(':') {
Some(idx) => &error_code[..idx],
None => error_code,
};
match error_code.find('#') {
Some(idx) => &error_code[idx + 1..],
None => error_code,
}
}
pub fn parse_query_compatible_header(headers: &Headers) -> Option<(&str, &str)> {
let value = headers.get("x-amzn-query-error")?;
value
.find(';')
.map(|idx| (&value[..idx], &value[idx + 1..]))
}
#[cfg(test)]
mod tests {
use super::*;
use aws_smithy_runtime_api::http::Headers;
#[test]
fn sanitize_strips_namespace_and_url() {
assert_eq!(sanitize_error_code("FooError"), "FooError");
assert_eq!(sanitize_error_code("com.example#FooError"), "FooError");
assert_eq!(
sanitize_error_code("FooError:http://internal.example.com/x"),
"FooError"
);
assert_eq!(
sanitize_error_code("com.example#FooError:http://internal/x"),
"FooError"
);
}
#[test]
fn query_compatible_header_splits_on_semicolon() {
let mut headers = Headers::new();
headers.insert("x-amzn-query-error", "AWS.SimpleQueueService.Foo;Sender");
assert_eq!(
parse_query_compatible_header(&headers),
Some(("AWS.SimpleQueueService.Foo", "Sender"))
);
}
#[test]
fn query_compatible_header_absent_or_malformed_is_none() {
let empty = Headers::new();
assert_eq!(parse_query_compatible_header(&empty), None);
let mut no_separator = Headers::new();
no_separator.insert("x-amzn-query-error", "NoSemicolon");
assert_eq!(parse_query_compatible_header(&no_separator), None);
}
}