Crates.io | facet |
lib.rs | facet |
version | |
source | src |
created_at | 2025-04-06 09:40:29.469658+00 |
updated_at | 2025-05-10 20:38:06.466753+00 |
description | Re-exports the Facet trait and derive macros, along with Shape and all related types |
homepage | |
repository | https://github.com/facet-rs/facet |
max_upload_size | |
id | 1622740 |
Cargo.toml error: | TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
Logo by Misiasart
Thanks to all individual and corporate sponsors, without whom this work could not exist:
facet provides reflection for Rust: it gives types a SHAPE
associated
const with details on the layout, fields, doc comments, attributes, etc.
It can be used for many things, from (de)serialization to pretty-printing, rich debuggers, CLI parsing, reflection in templating engines, code generation, etc.
See https://facet.rs for details.
We have the occasional soundness issue, see the soundness tag. Those are prioritized and fixed as soon as possible.
Format crates like facet-json
are still very much incomplete, and will
probably always be slower than the serde-*
equivalent. Reflection has
advantages in terms of flexibility, ergonomics and compile time but has
a runtime cost compared to "monomorphize all the things".
(Note: with codegen, one could get the best of both worlds. To be researched more)
Some format crates (like facet-toml
) first deserialize to a DOM, and then
to partial structs — this is not as efficient as it could be, but it's a good
first step.
Rust 1.86.0 has a compile error if you just import Facet but don't use it, see https://github.com/facet-rs/facet/issues/75. This is fixed in nightly and will no longer be a problem with the next major Rust version.
type_eq
is not const, thus preventing many useful things in const fn
, see
https://github.com/facet-rs/facet/issues/98. Language changes are needed
to address that.
The design of arbitrary attributes is still in flux, see:
There isn't a comparison between facet-reflect and bevy-reflect available right now— this is by design. We're letting facet develop on its own for a while; we'll make a detailed comparison once things have settled.
There are more issues and limitations of course, but this should get you started.
The core crates, facet-trait
, facet-types
etc. are no_std-friendly.
The main facet
crate re-exports symbols from:
Facet
trait and implementations for foreign types (mostly libstd
)Shape
struct along with various vtables and the whole Def
treePtrUninit
, PtrConst
, and Opaque
facet-derive
Facet
derive attribute as a fast/light proc macro powered by unsynnFor struct manipulation and reflection, the following is available:
facet supports deserialization from multiple data formats through dedicated crates:
Internal crates include:
facet-core
Licensed under either of:
at your option.