Skip to content

Instantly share code, notes, and snippets.

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