| 1 | // This file is part of ICU4X. For terms of use, please see the file |
| 2 | // called LICENSE at the top level of the ICU4X source tree |
| 3 | // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). |
| 4 | |
| 5 | //! Proc macros for generating `ULE`, `VarULE` impls and types for the `zerovec` crate |
| 6 | |
| 7 | use proc_macro::TokenStream; |
| 8 | use syn::{parse_macro_input, DeriveInput, Ident}; |
| 9 | mod make_ule; |
| 10 | mod make_varule; |
| 11 | pub(crate) mod ule; |
| 12 | mod utils; |
| 13 | mod varule; |
| 14 | |
| 15 | /// Full docs for this proc macro can be found on the [`zerovec`](docs.rs/zerovec) crate. |
| 16 | #[proc_macro_derive (ULE)] |
| 17 | pub fn ule_derive(input: TokenStream) -> TokenStream { |
| 18 | let input: DeriveInput = parse_macro_input!(input as DeriveInput); |
| 19 | TokenStream::from(ule::derive_impl(&input)) |
| 20 | } |
| 21 | |
| 22 | /// Full docs for this proc macro can be found on the [`zerovec`](docs.rs/zerovec) crate. |
| 23 | #[proc_macro_derive (VarULE)] |
| 24 | pub fn varule_derive(input: TokenStream) -> TokenStream { |
| 25 | let input: DeriveInput = parse_macro_input!(input as DeriveInput); |
| 26 | TokenStream::from(varule::derive_impl(&input, custom_varule_validator:None)) |
| 27 | } |
| 28 | |
| 29 | /// Full docs for this proc macro can be found on the [`zerovec`](docs.rs/zerovec) crate. |
| 30 | #[proc_macro_attribute ] |
| 31 | pub fn make_ule (attr: TokenStream, item: TokenStream) -> TokenStream { |
| 32 | let input: DeriveInput = parse_macro_input!(item as DeriveInput); |
| 33 | let attr: Ident = parse_macro_input!(attr as Ident); |
| 34 | TokenStream::from(make_ule::make_ule_impl(ule_name:attr, input)) |
| 35 | } |
| 36 | |
| 37 | /// Full docs for this proc macro can be found on the [`zerovec`](docs.rs/zerovec) crate. |
| 38 | #[proc_macro_attribute ] |
| 39 | pub fn make_varule (attr: TokenStream, item: TokenStream) -> TokenStream { |
| 40 | let input: DeriveInput = parse_macro_input!(item as DeriveInput); |
| 41 | let attr: Ident = parse_macro_input!(attr as Ident); |
| 42 | TokenStream::from(make_varule::make_varule_impl(ule_name:attr, input)) |
| 43 | } |
| 44 | |