Skip to content

Commit ab6e5d3

Browse files
committed
serialize page token with messagepack instead of as JSON string
1 parent 6b41086 commit ab6e5d3

File tree

3 files changed

+33
-10
lines changed

3 files changed

+33
-10
lines changed

Cargo.lock

+23
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dropshot/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ multer = "3.0.0"
2626
paste = "1.0.14"
2727
percent-encoding = "2.3.1"
2828
proc-macro2 = "1.0.78"
29+
rmp-serde = "1.1.2"
2930
rustls = "0.22.2"
3031
rustls-pemfile = "2.1.0"
3132
serde_json = "1.0.114"

dropshot/src/pagination.rs

+9-10
Original file line numberDiff line numberDiff line change
@@ -418,13 +418,12 @@ fn serialize_page_token<PageSelector: Serialize>(
418418
let serialized_token =
419419
SerializedToken { v: PaginationVersion::V1, page_start };
420420

421-
let json_bytes =
422-
serde_json::to_vec(&serialized_token).map_err(|e| {
423-
HttpError::for_internal_error(format!(
424-
"failed to serialize token: {}",
425-
e
426-
))
427-
})?;
421+
let json_bytes = rmp_serde::to_vec(&serialized_token).map_err(|e| {
422+
HttpError::for_internal_error(format!(
423+
"failed to serialize token: {}",
424+
e
425+
))
426+
})?;
428427

429428
URL_SAFE.encode(json_bytes)
430429
};
@@ -470,7 +469,7 @@ fn deserialize_page_token<PageSelector: DeserializeOwned>(
470469
// output of the error anyway. It's not clear how else we could
471470
// propagate this information out.
472471
let deserialized: SerializedToken<PageSelector> =
473-
serde_json::from_slice(&json_bytes).map_err(|_| {
472+
rmp_serde::from_slice(&json_bytes).map_err(|_| {
474473
String::from("failed to parse pagination token: corrupted token")
475474
})?;
476475

@@ -533,7 +532,7 @@ mod test {
533532
s: String,
534533
}
535534
let input =
536-
TokenWithStr { s: String::from_utf8(vec![b'e'; 352]).unwrap() };
535+
TokenWithStr { s: String::from_utf8(vec![b'e'; 376]).unwrap() };
537536
let serialized = serialize_page_token(&input).unwrap();
538537
assert_eq!(serialized.len(), super::MAX_TOKEN_LENGTH);
539538
let output: TokenWithStr = deserialize_page_token(&serialized).unwrap();
@@ -544,7 +543,7 @@ mod test {
544543
// Start by attempting to serialize a token larger than the maximum
545544
// allowed size.
546545
let input =
547-
TokenWithStr { s: String::from_utf8(vec![b'e'; 353]).unwrap() };
546+
TokenWithStr { s: String::from_utf8(vec![b'e'; 377]).unwrap() };
548547
let error = serialize_page_token(&input).unwrap_err();
549548
assert_eq!(error.status_code, http::StatusCode::INTERNAL_SERVER_ERROR);
550549
assert_eq!(error.external_message, "Internal Server Error");

0 commit comments

Comments
 (0)