nt_list_macros/
lib.rs

1// Copyright 2022 Colin Finck <colin@reactos.org>
2// SPDX-License-Identifier: MIT OR Apache-2.0
3
4mod helpers;
5
6use proc_macro::TokenStream;
7use quote::quote;
8use syn::{parse_macro_input, DeriveInput};
9
10#[proc_macro_derive(NtList)]
11pub fn derive_nt_list(input: TokenStream) -> TokenStream {
12    let input = parse_macro_input!(input as DeriveInput);
13    helpers::derive_list_enum_trait(input, "NtList", quote! {::nt_list::list::NtList})
14        .unwrap_or_else(|e| e.to_compile_error())
15        .into()
16}
17
18#[proc_macro_derive(NtListElement, attributes(boxed))]
19pub fn derive_nt_list_element(input: TokenStream) -> TokenStream {
20    let input = parse_macro_input!(input as DeriveInput);
21    helpers::derive_list_struct_trait(input)
22        .unwrap_or_else(|e| e.to_compile_error())
23        .into()
24}
25
26#[proc_macro_derive(NtSingleList)]
27pub fn derive_nt_single_list(input: TokenStream) -> TokenStream {
28    let input = parse_macro_input!(input as DeriveInput);
29    helpers::derive_list_enum_trait(
30        input,
31        "NtSingleList",
32        quote! {::nt_list::single_list::NtSingleList},
33    )
34    .unwrap_or_else(|e| e.to_compile_error())
35    .into()
36}