xref: /qemu/rust/qemu-api-macros/src/utils.rs (revision efe25c260cd69dcfc948e1622bedbdec953569a8)
1 // Procedural macro utilities.
2 // Author(s): Paolo Bonzini <pbonzini@redhat.com>
3 // SPDX-License-Identifier: GPL-2.0-or-later
4 
5 use proc_macro2::Span;
6 use quote::quote_spanned;
7 
8 pub enum MacroError {
9     Message(String, Span),
10     ParseError(syn::Error),
11 }
12 
13 impl From<syn::Error> for MacroError {
14     fn from(err: syn::Error) -> Self {
15         MacroError::ParseError(err)
16     }
17 }
18 
19 impl From<MacroError> for proc_macro2::TokenStream {
20     fn from(err: MacroError) -> Self {
21         match err {
22             MacroError::Message(msg, span) => quote_spanned! { span => compile_error!(#msg); },
23             MacroError::ParseError(err) => err.into_compile_error(),
24         }
25     }
26 }
27