serde_tokenstream
This Rust crate is intended for use with macros that need bespoke configuration.
It's implemented as a serde::Deserializer
that operates on a
proc_macro2::TokenSteam
(easily converted from the standard
proc_macro::TokenStream
).
Usage
Say we're building a custom proc macro that you want consumers to use like this:
The function that implements the proc macro must have two parameters (both of
type proc_macro::TokenStream
): attributes (the tokens with the braces that
follow the name of the macro), and the item (the function, type, etc. to
which the macro is applied):
We'll first define the struct
type that represents the configuration and
derive
a serde::Deserialize
:
Now we can parse attr
into the Config
struct with serde_tokenstream::from_tokenstream
:
use TokenStream;
use from_tokenstream;
See the serde
documentation for the full range of controls that can be
applied to types and their members.
Error Handling
Note that errors will highlight the problematic portion of consuming code:
error: unknown variant `Fusion`, expected one of `Coal`, `Fission`, `Hydroelectric`
--> tests/test_err1.rs:7:16
|
7 | kind = Fusion,
| ^^^^^^