Skip to content

Instantly share code, notes, and snippets.

@niklaskorz
Created April 14, 2025 10:53
Show Gist options
  • Save niklaskorz/fa98d5249fe215c110c8f529a9f8be1c to your computer and use it in GitHub Desktop.
Save niklaskorz/fa98d5249fe215c110c8f529a9f8be1c to your computer and use it in GitHub Desktop.
facet_json vs serde_json
#![feature(test)]
// Run with `cargo +nightly bench`
#[derive(facet::Facet)]
struct FacetPerson {
name: String,
age: u32,
}
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
struct SerdePerson {
name: String,
age: u32,
}
extern crate test;
#[cfg(test)]
mod tests {
use super::*;
use facet_json::{from_str, to_json_string};
use facet_reflect::Peek;
use test::Bencher;
#[bench]
fn bench_facet_to_json(b: &mut Bencher) {
b.iter(|| {
// Create a struct to serialize
let person = FacetPerson {
name: "Alice".to_string(),
age: 30,
};
// Create a Peek object from the struct
let peek = Peek::new(&person);
// Serialize to JSON
let json = to_json_string(peek, false);
json
});
}
#[bench]
fn bench_facet_from_json(b: &mut Bencher) {
b.iter(|| {
// Deserialize the JSON to a Person struct
let person: FacetPerson = from_str("{\"name\": \"Alice\", \"age\": 30}").unwrap();
person
});
}
#[bench]
fn bench_serde_to_json(b: &mut Bencher) {
b.iter(|| {
// Create a struct to serialize
let person = SerdePerson {
name: "Alice".to_string(),
age: 30,
};
// Serialize to JSON
let json = serde_json::to_string(&person).unwrap();
json
});
}
#[bench]
fn bench_serde_from_json(b: &mut Bencher) {
b.iter(|| {
// Deserialize the JSON to a Person struct
let person: SerdePerson = serde_json::from_str("{\"name\": \"Alice\", \"age\": 30}").unwrap();
person
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment