ordinal_map_derive/
lib.rs

1//! Procedural macros for `ordinal-map` crate.
2//!
3//! This crate does not have a public API, everything is re-exported from `ordinal-map` crate.
4
5mod ordinal;
6
7fn wrapper(
8    input: proc_macro::TokenStream,
9    f: impl FnOnce(proc_macro2::TokenStream) -> syn::Result<proc_macro2::TokenStream>,
10) -> proc_macro::TokenStream {
11    let input = proc_macro2::TokenStream::from(input);
12    let output = f(input).unwrap_or_else(|e| e.to_compile_error());
13    proc_macro::TokenStream::from(output)
14}
15
16/// Derive `Ordinal` for structs or enums.
17///
18/// See `Ordinal` trait for more information.
19#[proc_macro_derive(Ordinal)]
20pub fn derive_ordinal(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
21    wrapper(input, ordinal::derive_ordinal)
22}
23
24#[proc_macro]
25#[doc(hidden)]
26pub fn impl_ordinal_for_tuple(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
27    wrapper(input, ordinal::impl_ordinal_for_tuple)
28}