use bytes::BufMut;
use criterion::{black_box, criterion_group, criterion_main, Criterion};
#[derive(serde::Serialize)]
pub struct A<'a> {
a: &'a str,
b: &'a str,
c: &'a str,
d: i64,
e: f64,
#[serde(with = "serde_bytes")]
f: &'a [u8],
}
fn benchmark(c: &mut Criterion) {
let val = A {
a: "Now this is a story all about how
My life got flipped turned upside down
And I'd like to take a minute, just sit right there
I'll tell you how I became the prince of a town called Bel-Air",
b: "In West Philadelphia born and raised
On the playground is where I spent most of my days
Chillin' out, maxin', relaxin' all cool
And all shootin' some b-ball outside of the school
When a couple of guys who were up to no good
Started makin' trouble in my neighborhood",
c: "I got in one little fight and my mom got scared
And said 'You're movin' with your auntie and uncle in Bel-Air'",
d: 420,
e: 420.69696969696969,
f: "Above are some popular 'pop culture' references for your perusal and enjoyment"
.as_bytes(),
};
c.bench_function("borrowed: mongodb's bson", |b| {
let mut theirs = Vec::new();
b.iter(|| {
bson::ser::to_document(black_box(&val))
.unwrap()
.to_writer(&mut theirs)
.unwrap();
theirs.clear();
})
});
c.bench_function("borrowed: serde_bson", |b| {
let mut out = bytes::BytesMut::new();
b.iter(|| {
serde_bson::to_string(black_box(&val), &mut out).unwrap();
drop(out.split());
});
});
}
criterion_group!(benches, benchmark);
criterion_main!(benches);