Skip to main content

mev_proc_impl/
lib.rs

1use proc_macro2::TokenStream;
2
3macro_rules! parse_macro_input {
4    ($token_stream:ident as $ty:ty) => {
5        match syn::parse2::<$ty>($token_stream) {
6            Ok(input) => input,
7            Err(err) => return err.to_compile_error().into(),
8        }
9    };
10}
11
12mod args;
13mod auto_repr;
14mod r#match;
15mod metal;
16mod repr;
17mod vertex;
18mod vulkan;
19// mod webgl;
20mod webgpu;
21
22pub fn arguments_derive(input: TokenStream, mev: &TokenStream) -> TokenStream {
23    let input = parse_macro_input!(input as syn::DeriveInput);
24
25    let metal_tokens = match metal::arguments::derive(&input, mev) {
26        Ok(tokens) => tokens,
27        Err(err) => err.to_compile_error(),
28    };
29
30    let vulkan_tokens = match vulkan::arguments::derive(&input, mev) {
31        Ok(tokens) => tokens,
32        Err(err) => err.to_compile_error(),
33    };
34
35    let webgpu_tokens = match webgpu::arguments::derive(&input, mev) {
36        Ok(tokens) => tokens,
37        Err(err) => err.to_compile_error(),
38    };
39    quote::quote! {
40        #mev::with_metal! { #metal_tokens }
41        #mev::with_vulkan! { #vulkan_tokens }
42        #mev::with_webgpu! { #webgpu_tokens }
43    }
44}
45
46pub fn derive_repr(input: TokenStream, mev: &TokenStream) -> TokenStream {
47    let input = parse_macro_input!(input as syn::DeriveInput);
48
49    match repr::derive(&input, mev) {
50        Ok(tokens) => tokens,
51        Err(err) => err.to_compile_error(),
52    }
53}
54
55pub fn derive_auto_repr(input: TokenStream, mev: &TokenStream) -> TokenStream {
56    let input = parse_macro_input!(input as syn::DeriveInput);
57
58    match auto_repr::derive(&input, mev) {
59        Ok(tokens) => tokens,
60        Err(err) => err.to_compile_error(),
61    }
62}
63
64pub fn match_backend(input: TokenStream, mev: &TokenStream) -> TokenStream {
65    r#match::match_backend(input, mev)
66}
67
68pub fn derive_vertex(input: TokenStream, mev: &TokenStream) -> TokenStream {
69    let input = parse_macro_input!(input as syn::DeriveInput);
70
71    match vertex::derive(&input, mev) {
72        Ok(tokens) => tokens,
73        Err(err) => err.to_compile_error(),
74    }
75}