Guidelines for using facet crates (facet-json, facet-toml, facet-args) instead of serde-based alternatives for consistent dogfooding
Installation
Details
Usage
After installing, this skill will be available to your AI coding assistant.
Verify installation:
skills listSkill Instructions
name: use-facet-crates description: Guidelines for using facet crates (facet-json, facet-toml, facet-args) instead of serde-based alternatives for consistent dogfooding
Use Facet Crates Instead of Serde Ecosystem
When writing code in this workspace, prefer facet-based crates over serde-based ones. This project is building facet as a replacement for serde, so we should dogfood our own libraries.
Crate Replacements
| Instead of | Use | Notes |
|---|---|---|
serde | facet | Core derive and traits |
serde_json | facet-json | JSON serialization/deserialization |
toml | facet-toml | TOML parsing |
serde_yaml | facet-yaml | YAML support |
clap | facet-args | CLI argument parsing |
serde_derive | facet (derive) | #[derive(Facet)] replaces Serialize/Deserialize |
When to Use Which
Use facet-json for:
- New code in this workspace
- Internal tools (like benchmark-analyzer)
- Anything that doesn't need serde compatibility
serde_json is acceptable for:
- Interop with external crates that require serde
- Benchmarks comparing facet vs serde performance
- Code that specifically tests serde compatibility
Quick Example
// OLD (serde)
use serde::{Serialize, Deserialize};
use serde_json;
#[derive(Serialize, Deserialize)]
struct Config {
name: String,
}
let config: Config = serde_json::from_str(json)?;
// NEW (facet)
use facet::Facet;
use facet_json as json;
#[derive(Facet)]
struct Config {
name: String,
}
let config: Config = json::from_str(json)?;
Checking Dependencies
When adding new dependencies or reviewing code, check Cargo.toml for serde ecosystem crates and consider if facet alternatives exist.
TODO for This Workspace
The benchmark-analyzer currently uses serde_json for JSON serialization in chart data. This should be migrated to facet-json for consistency (eating our own dogfood).
Location: tools/benchmark-analyzer/src/report.rs - uses serde_json::to_string() for chart labels/data.
More by facet-rs
View allDebug crashes, segfaults, and memory errors using valgrind integration with nextest through pre-configured profiles
Orientation to facet-format JIT deserialization (tiering, fallbacks, key types/entry points) and where to look when changing or debugging JIT code
Profile code performance using callgrind and valgrind with nextest integration for analyzing instruction counts, cache behavior, and identifying bottlenecks
Systematic workflow for debugging by reproducing bugs with real data, reducing test cases to minimal examples, and adding regression tests
