Skip to content

Instantly share code, notes, and snippets.

@srijs

srijs/bench.rs Secret

Last active September 14, 2018 10:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save srijs/7fe21b43c2cf5d2ceeb593ae4591c6f5 to your computer and use it in GitHub Desktop.
Save srijs/7fe21b43c2cf5d2ceeb593ae4591c6f5 to your computer and use it in GitHub Desktop.
#![feature(test)]
extern crate serde;
extern crate test;
#[macro_use]
extern crate serde_derive;
extern crate serde_json;
use serde_json::{RawValue, Value};
use test::Bencher;
const DOC: &str = r#"{
"_id": "srijs",
"_rev": "1-1841dec358ff29eca8c42a52f1c2a1d0",
"value": {
"first_name": "Sam",
"last_name": "Rijs",
"display_name": "Sammy",
"password_version": 3,
"password_salt": "be887ed005be8456ada9",
"password_hash": "004b9f8ebb49d4db0f619cc799b67a154e15bb9b",
"signup": 1488499210429,
"last_login": 1536833933821,
"referral_source": "google",
"language_preference": "en-AU"
}
}"#;
#[derive(Deserialize)]
struct DatabaseDocument<T> {
#[serde(rename = "_id")]
id: String,
#[serde(rename = "_rev")]
rev: String,
value: T,
}
#[derive(Serialize)]
struct ApiResponseBody<T> {
data: T,
}
#[bench]
fn deserialize_and_serialize_value(b: &mut Bencher) {
b.iter(|| {
let doc_json = test::black_box(DOC);
let db_doc = serde_json::from_str::<DatabaseDocument<Value>>(doc_json).unwrap();
serde_json::to_string(&ApiResponseBody { data: db_doc.value }).unwrap()
});
}
#[bench]
fn deserialize_and_serialize_raw_value(b: &mut Bencher) {
b.iter(|| {
let doc_json = test::black_box(DOC);
let db_doc = serde_json::from_str::<DatabaseDocument<RawValue>>(doc_json).unwrap();
serde_json::to_string(&ApiResponseBody { data: db_doc.value }).unwrap()
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment