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