<!doctype html><style>
/* Arborium syntax highlighting - Tokyo Night theme */
a-k { color: #bb9af7; } /* keywords */
a-f { color: #7aa2f7; } /* functions */
a-s { color: #9ece6a; } /* strings */
a-c { color: #565f89; } /* comments */
a-t { color: #2ac3de; } /* types */
a-v { color: #c0caf5; } /* variables */
a-vb { color: #f7768e; } /* built-in variables (self, this) */
a-co { color: #ff9e64; } /* constants */
a-n { color: #ff9e64; } /* numbers */
a-o { color: #89ddff; } /* operators */
a-p { color: #a9b1d6; } /* punctuation */
a-pr { color: #73daca; } /* properties */
a-at { color: #bb9af7; } /* attributes */
a-tg { color: #f7768e; } /* tags (HTML/XML) */
a-m { color: #7dcfff; } /* macros */
a-l { color: #e0af68; } /* labels */
a-ns { color: #2ac3de; } /* namespaces/modules */
a-cr { color: #7aa2f7; } /* constructors */
a-tt { color: #c0caf5; font-weight: bold; } /* titles */
a-st { font-weight: bold; } /* strong */
a-em { } /* emphasis */
a-tu { color: #7aa2f7; text-decoration: underline; } /* links */
a-tl { color: #9ece6a; } /* literals */
a-tx { text-decoration: line-through; } /* strikethrough */
a-da { color: #9ece6a; } /* diff add */
a-dd { color: #f7768e; } /* diff delete */
a-eb { color: #ff9e64; } /* embedded */
a-er { color: #f7768e; text-decoration: wavy underline; } /* errors */
</style><style>
pre .build-info-btn {
position: absolute;
top: 0.5rem;
right: 3.5rem;
padding: 0.25rem;
font-size: 0.75rem;
background: rgba(255,255,255,0.1);
border: 1px solid rgba(255,255,255,0.2);
border-radius: 0.25rem;
color: inherit;
cursor: pointer;
opacity: 0;
transition: opacity 0.15s;
line-height: 1;
}
pre:hover .build-info-btn { opacity: 1; }
pre .build-info-btn:hover { background: rgba(255,255,255,0.2); }
pre .build-info-btn.verified { border-color: rgba(50,205,50,0.5); }
.build-info-popup {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: #1a1a2e;
border: 1px solid rgba(255,255,255,0.2);
border-radius: 0.5rem;
padding: 1.5rem 2rem;
width: 90vw;
max-width: 800px;
max-height: 80vh;
overflow-y: auto;
z-index: 10000;
color: #e0e0e0;
font-family: ui-monospace, monospace;
font-size: 0.8rem;
box-shadow: 0 25px 50px -12px rgba(0,0,0,0.5);
}
.build-info-popup h3 {
margin: 0 0 1rem 0;
color: #fff;
font-size: 0.95rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.build-info-popup .close-btn {
position: absolute;
top: 0.75rem;
right: 0.75rem;
background: none;
border: none;
color: #888;
font-size: 1.25rem;
cursor: pointer;
padding: 0.25rem;
}
.build-info-popup .close-btn:hover { color: #fff; }
.build-info-popup dl {
margin: 0;
display: grid;
grid-template-columns: auto 1fr;
gap: 0.4rem 1rem;
}
.build-info-popup dt {
color: #888;
font-weight: 500;
}
.build-info-popup dd {
margin: 0;
word-break: break-all;
}
.build-info-popup .deps-list {
max-height: 250px;
overflow-y: auto;
background: rgba(0,0,0,0.2);
padding: 0.5rem 0.75rem;
border-radius: 0.25rem;
font-size: 0.7rem;
}
.build-info-popup .deps-list div {
padding: 0.2rem 0;
display: flex;
align-items: center;
gap: 0.5rem;
}
.build-info-popup .field-icon {
width: 14px;
height: 14px;
vertical-align: -2px;
margin-right: 0.25rem;
opacity: 0.7;
}
.build-info-popup .deps-list a,
.build-info-popup .deps-list .dep-local {
color: #e0e0e0;
text-decoration: none;
display: inline-flex;
align-items: center;
gap: 0.35rem;
}
.build-info-popup .deps-list a:hover {
color: #fff;
}
.build-info-popup .deps-list a:hover .dep-icon {
color: #fff;
}
.build-info-popup .deps-list .dep-icon {
width: 14px;
height: 14px;
flex-shrink: 0;
color: #888;
}
.build-info-popup .deps-list .dep-name {
font-weight: 500;
}
.build-info-popup .deps-list .dep-version {
color: #888;
font-weight: normal;
}
.build-info-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.5);
z-index: 9999;
}
</style><script>
(function() {
// SVG icons
var cratesIoIcon = '<svg class="dep-icon" viewBox="0 0 512 512"><path fill="currentColor" d="M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v160.4l-160 53.5z"/></svg>';
var gitIcon = '<svg class="dep-icon" viewBox="0 0 16 16"><path fill="currentColor" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg>';
var pathIcon = '<svg class="dep-icon" viewBox="0 0 16 16"><path fill="currentColor" d="M1.75 1A1.75 1.75 0 000 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0016 13.25v-8.5A1.75 1.75 0 0014.25 3H7.5a.25.25 0 01-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75z"/></svg>';
var rustcIcon = '<svg class="field-icon" viewBox="0 0 16 16"><path fill="currentColor" d="M8 0l1.5 2.5L12 1.5l-.5 2.5 2.5.5-1.5 2.5L15 8l-2.5 1.5.5 2.5-2.5-.5-.5 2.5-2.5-1.5L8 16l-1.5-2.5L4 14.5l.5-2.5-2.5-.5 1.5-2.5L1 8l2.5-1.5L3 4l2.5.5.5-2.5 2.5 1.5L8 0zm0 5a3 3 0 100 6 3 3 0 000-6z"/></svg>';
var targetIcon = '<svg class="field-icon" viewBox="0 0 16 16"><path fill="currentColor" d="M8 0a8 8 0 100 16A8 8 0 008 0zm0 2a6 6 0 110 12A6 6 0 018 2zm0 2a4 4 0 100 8 4 4 0 000-8zm0 2a2 2 0 110 4 2 2 0 010-4z"/></svg>';
var clockIcon = '<svg class="field-icon" viewBox="0 0 16 16"><path fill="currentColor" d="M8 0a8 8 0 100 16A8 8 0 008 0zm0 2a6 6 0 110 12A6 6 0 018 2zm-.5 2v4.5l3 2 .75-1.125-2.25-1.5V4h-1.5z"/></svg>';
var depsIcon = '<svg class="field-icon" viewBox="0 0 16 16"><path fill="currentColor" d="M1 2.5A1.5 1.5 0 012.5 1h3a1.5 1.5 0 011.5 1.5v3A1.5 1.5 0 015.5 7h-3A1.5 1.5 0 011 5.5v-3zm8 0A1.5 1.5 0 0110.5 1h3A1.5 1.5 0 0115 2.5v3A1.5 1.5 0 0113.5 7h-3A1.5 1.5 0 019 5.5v-3zm-8 8A1.5 1.5 0 012.5 9h3A1.5 1.5 0 017 10.5v3A1.5 1.5 0 015.5 15h-3A1.5 1.5 0 011 13.5v-3zm8 0A1.5 1.5 0 0110.5 9h3a1.5 1.5 0 011.5 1.5v3a1.5 1.5 0 01-1.5 1.5h-3A1.5 1.5 0 019 13.5v-3z"/></svg>';
function formatLocalTime(isoString) {
try {
var date = new Date(isoString);
return date.toLocaleDateString(undefined, { year: 'numeric', month: 'long', day: 'numeric' }) + ' at ' + date.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' });
} catch (e) {
return isoString;
}
}
function escapeHtml(str) {
return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
}
window.showBuildInfoPopup = function(info) {
// Remove existing popup
var existing = document.querySelector('.build-info-overlay');
if (existing) existing.remove();
var overlay = document.createElement('div');
overlay.className = 'build-info-overlay';
var popup = document.createElement('div');
popup.className = 'build-info-popup';
var depsHtml = '';
if (info.deps && info.deps.length > 0) {
depsHtml = '<dt>' + depsIcon + ' Dependencies</dt><dd><div class="deps-list">';
info.deps.forEach(function(d) {
var icon, link, versionDisplay;
var src = d.source;
if (src.type === 'crates.io') {
icon = cratesIoIcon;
link = 'https://crates.io/crates/' + encodeURIComponent(d.name) + '/' + encodeURIComponent(d.version);
versionDisplay = d.version;
depsHtml += '<div><a href="' + link + '" target="_blank" rel="noopener" title="View on crates.io">' + icon + ' <span class="dep-name">' + escapeHtml(d.name) + '</span> <span class="dep-version">' + escapeHtml(versionDisplay) + '</span></a></div>';
} else if (src.type === 'git') {
icon = gitIcon;
// Generate proper commit link for GitHub repos
var commitShort = src.commit.substring(0, 8);
versionDisplay = d.version + ' @ ' + commitShort;
if (src.url.indexOf('github.com') !== -1) {
// GitHub: link directly to the commit
link = src.url.replace(/\.git$/, '') + '/tree/' + src.commit;
} else {
// Other git hosts: just link to the repo
link = src.url;
}
depsHtml += '<div><a href="' + escapeHtml(link) + '" target="_blank" rel="noopener" title="View commit ' + escapeHtml(src.commit) + '">' + icon + ' <span class="dep-name">' + escapeHtml(d.name) + '</span> <span class="dep-version">' + escapeHtml(versionDisplay) + '</span></a></div>';
} else {
// path dependency
icon = pathIcon;
versionDisplay = d.version;
depsHtml += '<div><span class="dep-local">' + icon + ' <span class="dep-name">' + escapeHtml(d.name) + '</span> <span class="dep-version">' + escapeHtml(versionDisplay) + '</span></span></div>';
}
});
depsHtml += '</div></dd>';
}
popup.innerHTML =
'<button class="close-btn" aria-label="Close">×</button>' +
'<h3>✅ Build Verified</h3>' +
'<dl>' +
'<dt>' + rustcIcon + ' Compiler</dt><dd>' + escapeHtml(info.rustc) + '</dd>' +
'<dt>' + rustcIcon + ' Cargo</dt><dd>' + escapeHtml(info.cargo) + '</dd>' +
'<dt>' + targetIcon + ' Target</dt><dd>' + escapeHtml(info.target) + '</dd>' +
'<dt>' + clockIcon + ' Built</dt><dd>' + formatLocalTime(info.timestamp) + (info.cacheHit ? ' (cached)' : '') + '</dd>' +
depsHtml +
'</dl>';
overlay.appendChild(popup);
document.body.appendChild(overlay);
function close() {
overlay.remove();
}
overlay.addEventListener('click', function(e) {
if (e.target === overlay) close();
});
popup.querySelector('.close-btn').addEventListener('click', close);
document.addEventListener('keydown', function handler(e) {
if (e.key === 'Escape') {
close();
document.removeEventListener('keydown', handler);
}
});
};
})();
</script><html lang=en><meta charset=utf-8><meta content="width=device-width,initial-scale=1" name=viewport><title>facet</title><meta name=description><link href=/main.42400d252302.css rel=stylesheet><link href=/pagefind/pagefind-ui.css rel=stylesheet><link href=/favicon.png rel=icon sizes=32x32 type=image/png><link href=/favicon.0e354c346665.ico rel=icon type=image/x-icon><link href=/favicon.png rel=apple-touch-icon><body><nav class=site-nav><a class=site-nav-brand href=/> <picture><source srcset="/favicon.0oadoc141446.jxl 121w" type=image/jxl><source srcset="/favicon.40c53c3oc1a4.webp 121w" type=image/webp><img onload="this.style.background='none'" style="background:url(data:image/png;base64,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) 50%/cover no-repeat" alt class=site-nav-logo decoding=async height=128 loading=lazy src=/favicon.40c53c3oc1a4.webp width=121></picture> <span>facet</span> </a><div class=site-nav-links><a href=/guide>Guide</a><a href=/reference>Reference</a><a href=/extend>Extend</a><a href=/contribute>Contribute</a></div><div class=site-nav-search id=search></div><a class=site-nav-github href=https://github.com/facet-rs/facet title=GitHub> <svg viewbox="0 0 16 16" fill=currentColor height=24 width=24><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg> </a></nav><div class=container><main class="content home-content"><p><strong>facet</strong> is a reflection library for Rust. One derive macro gives you serialization, pretty-printing, diffing, and more.<pre><code class=language-rust><a-at>#</a-at><a-p>[</a-p><a-at>derive</a-at><a-p>(</a-p><a-cr>Facet</a-cr><a-p>)]</a-p>
<a-k>struct</a-k> <a-t>Config</a-t> <a-p>{</a-p>
<a-pr>name</a-pr><a-p>:</a-p> <a-t>String</a-t><a-p>,</a-p>
<a-pr>port</a-pr><a-p>:</a-p> <a-t>u16</a-t><a-p>,</a-p>
<a-at>#</a-at><a-p>[</a-p><a-at>facet</a-at><a-p>(</a-p><a-at>sensitive</a-at><a-p>)]</a-p>
<a-pr>api_key</a-pr><a-p>:</a-p> <a-t>String</a-t><a-p>,</a-p>
<a-p>}</a-p>
</code><button class="build-info-btn verified" aria-label="View build info" title="Verified: rustc 1.91.1 (ed61e7d7e 2025-11-07)" onclick="showBuildInfoPopup({"rustc":"rustc 1.91.1 (ed61e7d7e 2025-11-07)","cargo":"cargo 1.91.1 (ea2d97820 2025-10-10)","target":"x86_64-unknown-linux-gnu","timestamp":"2025-12-21T13:44:49Z","cacheHit":false,"platform":"linux","arch":"x86_64","deps":[{"name":"android_system_properties","version":"0.1.5","source":{"type":"crates.io"}},{"name":"autocfg","version":"1.5.0","source":{"type":"crates.io"}},{"name":"bitflags","version":"2.10.0","source":{"type":"crates.io"}},{"name":"bumpalo","version":"3.19.1","source":{"type":"crates.io"}},{"name":"bytes","version":"1.11.0","source":{"type":"crates.io"}},{"name":"camino","version":"1.2.2","source":{"type":"crates.io"}},{"name":"cc","version":"1.2.50","source":{"type":"crates.io"}},{"name":"cfg-if","version":"1.0.4","source":{"type":"crates.io"}},{"name":"chrono","version":"0.4.42","source":{"type":"crates.io"}},{"name":"core-foundation-sys","version":"0.8.7","source":{"type":"crates.io"}},{"name":"deranged","version":"0.5.5","source":{"type":"crates.io"}},{"name":"displaydoc","version":"0.2.5","source":{"type":"crates.io"}},{"name":"dodeca-code-sample","version":"0.1.0","source":{"type":"crates.io"}},{"name":"equivalent","version":"1.0.2","source":{"type":"crates.io"}},{"name":"errno","version":"0.3.14","source":{"type":"crates.io"}},{"name":"facet","version":"0.33.0","source":{"type":"git","url":"https://github.com/facet-rs/facet","commit":"0c27338f0b7bbbb5fdf776c0c881b43f6034d409"}},{"name":"facet-core","version":"0.33.0","source":{"type":"git","url":"https://github.com/facet-rs/facet","commit":"0c27338f0b7bbbb5fdf776c0c881b43f6034d409"}},{"name":"facet-json","version":"0.33.0","source":{"type":"git","url":"https://github.com/facet-rs/facet","commit":"0c27338f0b7bbbb5fdf776c0c881b43f6034d409"}},{"name":"facet-kdl","version":"0.33.0","source":{"type":"git","url":"https://github.com/facet-rs/facet","commit":"0c27338f0b7bbbb5fdf776c0c881b43f6034d409"}},{"name":"facet-macro-parse","version":"0.33.0","source":{"type":"git","url":"https://github.com/facet-rs/facet","commit":"0c27338f0b7bbbb5fdf776c0c881b43f6034d409"}},{"name":"facet-macro-types","version":"0.33.0","source":{"type":"git","url":"https://github.com/facet-rs/facet","commit":"0c27338f0b7bbbb5fdf776c0c881b43f6034d409"}},{"name":"facet-macros","version":"0.33.0","source":{"type":"git","url":"https://github.com/facet-rs/facet","commit":"0c27338f0b7bbbb5fdf776c0c881b43f6034d409"}},{"name":"facet-macros-impl","version":"0.33.0","source":{"type":"git","url":"https://github.com/facet-rs/facet","commit":"0c27338f0b7bbbb5fdf776c0c881b43f6034d409"}},{"name":"facet-reflect","version":"0.33.0","source":{"type":"git","url":"https://github.com/facet-rs/facet","commit":"0c27338f0b7bbbb5fdf776c0c881b43f6034d409"}},{"name":"facet-singularize","version":"0.33.0","source":{"type":"git","url":"https://github.com/facet-rs/facet","commit":"0c27338f0b7bbbb5fdf776c0c881b43f6034d409"}},{"name":"facet-solver","version":"0.33.0","source":{"type":"git","url":"https://github.com/facet-rs/facet","commit":"0c27338f0b7bbbb5fdf776c0c881b43f6034d409"}},{"name":"find-msvc-tools","version":"0.1.5","source":{"type":"crates.io"}},{"name":"form_urlencoded","version":"1.2.2","source":{"type":"crates.io"}},{"name":"getrandom","version":"0.3.4","source":{"type":"crates.io"}},{"name":"hashbrown","version":"0.16.1","source":{"type":"crates.io"}},{"name":"iana-time-zone","version":"0.1.64","source":{"type":"crates.io"}},{"name":"iana-time-zone-haiku","version":"0.1.2","source":{"type":"crates.io"}},{"name":"icu_collections","version":"2.1.1","source":{"type":"crates.io"}},{"name":"icu_locale_core","version":"2.1.1","source":{"type":"crates.io"}},{"name":"icu_normalizer","version":"2.1.1","source":{"type":"crates.io"}},{"name":"icu_normalizer_data","version":"2.1.1","source":{"type":"crates.io"}},{"name":"icu_properties","version":"2.1.2","source":{"type":"crates.io"}},{"name":"icu_properties_data","version":"2.1.2","source":{"type":"crates.io"}},{"name":"icu_provider","version":"2.1.1","source":{"type":"crates.io"}},{"name":"idna","version":"1.1.0","source":{"type":"crates.io"}},{"name":"idna_adapter","version":"1.2.1","source":{"type":"crates.io"}},{"name":"impls","version":"1.0.3","source":{"type":"crates.io"}},{"name":"indexmap","version":"2.12.1","source":{"type":"crates.io"}},{"name":"is_ci","version":"1.2.0","source":{"type":"crates.io"}},{"name":"itoa","version":"1.0.16","source":{"type":"crates.io"}},{"name":"jiff","version":"0.2.16","source":{"type":"crates.io"}},{"name":"jiff-static","version":"0.2.16","source":{"type":"crates.io"}},{"name":"jiff-tzdb","version":"0.1.5","source":{"type":"crates.io"}},{"name":"jiff-tzdb-platform","version":"0.1.3","source":{"type":"crates.io"}},{"name":"js-sys","version":"0.3.83","source":{"type":"crates.io"}},{"name":"kdl","version":"6.5.0","source":{"type":"crates.io"}},{"name":"lexical-parse-float","version":"1.0.6","source":{"type":"crates.io"}},{"name":"lexical-parse-integer","version":"1.0.6","source":{"type":"crates.io"}},{"name":"lexical-util","version":"1.0.7","source":{"type":"crates.io"}},{"name":"libc","version":"0.2.178","source":{"type":"crates.io"}},{"name":"libm","version":"0.2.15","source":{"type":"crates.io"}},{"name":"linux-raw-sys","version":"0.11.0","source":{"type":"crates.io"}},{"name":"litemap","version":"0.8.1","source":{"type":"crates.io"}},{"name":"log","version":"0.4.29","source":{"type":"crates.io"}},{"name":"memchr","version":"2.7.6","source":{"type":"crates.io"}},{"name":"miette","version":"7.6.0","source":{"type":"crates.io"}},{"name":"miette-derive","version":"7.6.0","source":{"type":"crates.io"}},{"name":"mutants","version":"0.0.3","source":{"type":"crates.io"}},{"name":"num","version":"0.4.3","source":{"type":"crates.io"}},{"name":"num-bigint","version":"0.4.6","source":{"type":"crates.io"}},{"name":"num-complex","version":"0.4.6","source":{"type":"crates.io"}},{"name":"num-conv","version":"0.1.0","source":{"type":"crates.io"}},{"name":"num-integer","version":"0.1.46","source":{"type":"crates.io"}},{"name":"num-iter","version":"0.1.45","source":{"type":"crates.io"}},{"name":"num-rational","version":"0.4.2","source":{"type":"crates.io"}},{"name":"num-traits","version":"0.2.19","source":{"type":"crates.io"}},{"name":"once_cell","version":"1.21.3","source":{"type":"crates.io"}},{"name":"ordered-float","version":"5.1.0","source":{"type":"crates.io"}},{"name":"owo-colors","version":"4.2.3","source":{"type":"crates.io"}},{"name":"percent-encoding","version":"2.3.2","source":{"type":"crates.io"}},{"name":"portable-atomic","version":"1.12.0","source":{"type":"crates.io"}},{"name":"portable-atomic-util","version":"0.2.4","source":{"type":"crates.io"}},{"name":"potential_utf","version":"0.1.4","source":{"type":"crates.io"}},{"name":"powerfmt","version":"0.2.0","source":{"type":"crates.io"}},{"name":"ppv-lite86","version":"0.2.21","source":{"type":"crates.io"}},{"name":"proc-macro2","version":"1.0.103","source":{"type":"crates.io"}},{"name":"proptest","version":"1.9.0","source":{"type":"crates.io"}},{"name":"quote","version":"1.0.42","source":{"type":"crates.io"}},{"name":"r-efi","version":"5.3.0","source":{"type":"crates.io"}},{"name":"rand","version":"0.8.5","source":{"type":"crates.io"}},{"name":"rand","version":"0.9.2","source":{"type":"crates.io"}},{"name":"rand_chacha","version":"0.9.0","source":{"type":"crates.io"}},{"name":"rand_core","version":"0.6.4","source":{"type":"crates.io"}},{"name":"rand_core","version":"0.9.3","source":{"type":"crates.io"}},{"name":"rand_xorshift","version":"0.4.0","source":{"type":"crates.io"}},{"name":"ruint","version":"1.17.0","source":{"type":"crates.io"}},{"name":"ruint-macro","version":"1.2.1","source":{"type":"crates.io"}},{"name":"rustc-hash","version":"2.1.1","source":{"type":"crates.io"}},{"name":"rustix","version":"1.1.2","source":{"type":"crates.io"}},{"name":"rustversion","version":"1.0.22","source":{"type":"crates.io"}},{"name":"ryu","version":"1.0.21","source":{"type":"crates.io"}},{"name":"serde","version":"1.0.228","source":{"type":"crates.io"}},{"name":"serde_core","version":"1.0.228","source":{"type":"crates.io"}},{"name":"serde_derive","version":"1.0.228","source":{"type":"crates.io"}},{"name":"shlex","version":"1.3.0","source":{"type":"crates.io"}},{"name":"smallvec","version":"1.15.1","source":{"type":"crates.io"}},{"name":"stable_deref_trait","version":"1.2.1","source":{"type":"crates.io"}},{"name":"static_assertions","version":"1.1.0","source":{"type":"crates.io"}},{"name":"strsim","version":"0.11.1","source":{"type":"crates.io"}},{"name":"supports-color","version":"3.0.2","source":{"type":"crates.io"}},{"name":"supports-hyperlinks","version":"3.2.0","source":{"type":"crates.io"}},{"name":"supports-unicode","version":"3.0.0","source":{"type":"crates.io"}},{"name":"syn","version":"2.0.111","source":{"type":"crates.io"}},{"name":"synstructure","version":"0.13.2","source":{"type":"crates.io"}},{"name":"terminal_size","version":"0.4.3","source":{"type":"crates.io"}},{"name":"textwrap","version":"0.16.2","source":{"type":"crates.io"}},{"name":"time","version":"0.3.44","source":{"type":"crates.io"}},{"name":"time-core","version":"0.1.6","source":{"type":"crates.io"}},{"name":"time-macros","version":"0.2.24","source":{"type":"crates.io"}},{"name":"tinystr","version":"0.8.2","source":{"type":"crates.io"}},{"name":"ulid","version":"1.2.1","source":{"type":"crates.io"}},{"name":"unarray","version":"0.1.4","source":{"type":"crates.io"}},{"name":"unicode-ident","version":"1.0.22","source":{"type":"crates.io"}},{"name":"unicode-linebreak","version":"0.1.5","source":{"type":"crates.io"}},{"name":"unicode-width","version":"0.1.14","source":{"type":"crates.io"}},{"name":"unicode-width","version":"0.2.2","source":{"type":"crates.io"}},{"name":"unsynn","version":"0.3.0","source":{"type":"crates.io"}},{"name":"url","version":"2.5.7","source":{"type":"crates.io"}},{"name":"utf8_iter","version":"1.0.4","source":{"type":"crates.io"}},{"name":"uuid","version":"1.19.0","source":{"type":"crates.io"}},{"name":"valuable","version":"0.1.1","source":{"type":"crates.io"}},{"name":"wasip2","version":"1.0.1+wasi-0.2.4","source":{"type":"crates.io"}},{"name":"wasm-bindgen","version":"0.2.106","source":{"type":"crates.io"}},{"name":"wasm-bindgen-macro","version":"0.2.106","source":{"type":"crates.io"}},{"name":"wasm-bindgen-macro-support","version":"0.2.106","source":{"type":"crates.io"}},{"name":"wasm-bindgen-shared","version":"0.2.106","source":{"type":"crates.io"}},{"name":"web-time","version":"1.1.0","source":{"type":"crates.io"}},{"name":"windows-core","version":"0.62.2","source":{"type":"crates.io"}},{"name":"windows-implement","version":"0.60.2","source":{"type":"crates.io"}},{"name":"windows-interface","version":"0.59.3","source":{"type":"crates.io"}},{"name":"windows-link","version":"0.2.1","source":{"type":"crates.io"}},{"name":"windows-result","version":"0.4.1","source":{"type":"crates.io"}},{"name":"windows-strings","version":"0.5.1","source":{"type":"crates.io"}},{"name":"windows-sys","version":"0.60.2","source":{"type":"crates.io"}},{"name":"windows-sys","version":"0.61.2","source":{"type":"crates.io"}},{"name":"windows-targets","version":"0.53.5","source":{"type":"crates.io"}},{"name":"windows_aarch64_gnullvm","version":"0.53.1","source":{"type":"crates.io"}},{"name":"windows_aarch64_msvc","version":"0.53.1","source":{"type":"crates.io"}},{"name":"windows_i686_gnu","version":"0.53.1","source":{"type":"crates.io"}},{"name":"windows_i686_gnullvm","version":"0.53.1","source":{"type":"crates.io"}},{"name":"windows_i686_msvc","version":"0.53.1","source":{"type":"crates.io"}},{"name":"windows_x86_64_gnu","version":"0.53.1","source":{"type":"crates.io"}},{"name":"windows_x86_64_gnullvm","version":"0.53.1","source":{"type":"crates.io"}},{"name":"windows_x86_64_msvc","version":"0.53.1","source":{"type":"crates.io"}},{"name":"winnow","version":"0.6.24","source":{"type":"crates.io"}},{"name":"wit-bindgen","version":"0.46.0","source":{"type":"crates.io"}},{"name":"writeable","version":"0.6.2","source":{"type":"crates.io"}},{"name":"yoke","version":"0.8.1","source":{"type":"crates.io"}},{"name":"yoke-derive","version":"0.8.1","source":{"type":"crates.io"}},{"name":"zerocopy","version":"0.8.31","source":{"type":"crates.io"}},{"name":"zerocopy-derive","version":"0.8.31","source":{"type":"crates.io"}},{"name":"zerofrom","version":"0.1.6","source":{"type":"crates.io"}},{"name":"zerofrom-derive","version":"0.1.6","source":{"type":"crates.io"}},{"name":"zeroize","version":"1.8.2","source":{"type":"crates.io"}},{"name":"zerotrie","version":"0.2.3","source":{"type":"crates.io"}},{"name":"zerovec","version":"0.11.5","source":{"type":"crates.io"}},{"name":"zerovec-derive","version":"0.11.2","source":{"type":"crates.io"}}]})">ⓘ</button></pre><p>From this single derive, you get:<ul><li><strong>Serialization</strong> — JSON, YAML, TOML, KDL, MessagePack<li><strong>Pretty-printing</strong> — Colored output with sensitive field redaction<li><strong>Diffing</strong> — Structural comparison between values<li><strong>Introspection</strong> — Query type information at runtime</ul><h2 id=choose-your-path>Choose your path</h2><div class=guide-cards><a class=guide-card href=/guide> <div class=guide-card__icon><img alt loading=lazy src=/icons/learn.d4a565ao5454.svg></div> <h3 id=guide>Guide</h3> <p class=tagline>Use facet in your app</p> <p class=description>Install a format crate, derive <code>Facet</code>, configure attributes, and ship with great diagnostics.</p> </a><a class=guide-card href=/reference> <div class=guide-card__icon><img alt loading=lazy src=/icons/reference.02a26ced246d.svg></div> <h3 id=reference>Reference</h3> <p class=tagline>Look it up fast</p> <p class=description>Attributes catalog, format matrix, extension namespaces, and FAQs in one place.</p> </a><a class=guide-card href=/extend> <div class=guide-card__icon><img alt loading=lazy src=/icons/extend.aco16a614aoa.svg></div> <h3 id=extend>Extend</h3> <p class=tagline>Build on reflection</p> <p class=description>Create extension attributes, read data with <code>Peek</code>, build values with <code>Partial</code>, and architect new format crates.</p> </a><a class=guide-card href=/contribute> <div class=guide-card__icon><img alt loading=lazy src=/icons/contribute.aoo1o0o366d3.svg></div> <h3 id=contribute>Contribute</h3> <p class=tagline>Work on facet itself</p> <p class=description>Architecture, derive internals, vtables, unsafe invariants, and the contributor workflow.</p> </a></div><h2 id=quick-links>Quick links</h2><ul><li><a href=/reference/format-crate-matrix>Format Support Matrix</a> — Feature comparison across format crates<li><a href=/extend/extension-attributes>Extension Attributes</a> — Format-specific attribute namespaces<li><a href=https://github.com/facet-rs/facet>GitHub</a> — Source code and issues<li><a href=https://docs.rs/facet>docs.rs</a> — API documentation</ul></main></div><footer class=site-footer><div class=footer-content><div class=footer-section><h4>Documentation</h4><ul><li><a href=/guide>Guide</a><li><a href=/reference>Reference</a><li><a href=/extend>Extend</a><li><a href=/contribute>Contribute</a></ul></div><div class=footer-section><h4>Community</h4><ul><li><a href=https://github.com/facet-rs/facet>GitHub</a><li><a href=https://discord.gg/JhD7CwCJ8F>Discord</a><li><a href=https://crates.io/crates/facet>crates.io</a><li><a href=https://docs.rs/facet>docs.rs</a></ul></div><div class="footer-section footer-meta"><p>Licensed under MIT/Apache-2.0</div></div></footer><script src=/pagefind/pagefind-ui.js></script><script>document.addEventListener(`DOMContentLoaded`,function(){
// Build TOC from showcase scenario headers
let toc=document.querySelector(`.toc ul`),showcase=document.querySelector(`.showcase`);toc&&showcase&&toc.children.length===0&&showcase.querySelectorAll(`h3[id]`).forEach(function(h3){let li=document.createElement(`li`),a=document.createElement(`a`);a.href=`#`+h3.id,a.textContent=h3.textContent.replace(/^§/,``),li.appendChild(a),toc.appendChild(li)});let searchShortcut=navigator.platform.toUpperCase().indexOf(`MAC`)>=0?`⌘K`:`Ctrl+K`;new PagefindUI({element:`#search`,showSubResults:!0,showImages:!1,translations:{placeholder:`Search ${searchShortcut}`}});
// Keyboard shortcuts for search
function isInputElement(el){let tagName=el.tagName.toLowerCase();return tagName===`input`||tagName===`textarea`||el.isContentEditable}document.addEventListener(`keydown`,function(e){let searchInput=document.querySelector(`#search input`);if(searchInput){
// Cmd+K or Ctrl+K
if((e.metaKey||e.ctrlKey)&&e.key===`k`){e.preventDefault(),searchInput.focus(),searchInput.select();return}
// Slash when not in an input
e.key===`/`&&!isInputElement(e.target)&&(e.preventDefault(),searchInput.focus(),searchInput.select())}})});</script>