From dee1f49d1a1e98c4cac0e76393a2feb052a12869 Mon Sep 17 00:00:00 2001 From: Pantonshire Date: Mon, 26 Apr 2021 11:48:45 +0100 Subject: [PATCH] MacroError type --- src/error.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/error.rs diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 0000000..4f33e0e --- /dev/null +++ b/src/error.rs @@ -0,0 +1,32 @@ +use std::borrow::Cow; + +use proc_macro2::Span; +use quote::quote_spanned; + +#[derive(Clone, Debug)] +pub(crate) struct MacroError { + message: Cow<'static, str>, + span: Span, +} + +impl MacroError { + pub(crate) fn new(message: Cow<'static, str>, span: Span) -> Self { + MacroError { + message, + span, + } + } + + pub(crate) fn to_token_stream(&self) -> proc_macro::TokenStream { + self.to_token_stream2().into() + } + + pub(crate) fn to_token_stream2(&self) -> proc_macro2::TokenStream { + let message = &self.message; + quote_spanned! { + self.span => ::std::compile_error!(#message); + } + } +} + +pub(crate) type Result = std::result::Result;