use proc_macro2::{Span, TokenStream};
use quote::ToTokens;
use syn::Error as SynError;
#[derive(Debug)]
pub struct Error(SynError);
impl Error {
pub fn new<T: ToString>(msg: T, span: Span) -> Self {
Self(SynError::new(span, msg.to_string()))
}
pub fn spanned<T: ToString>(tokens: impl ToTokens, msg: T) -> Self {
Self(SynError::new_spanned(tokens, msg.to_string()))
}
pub fn as_syn(&self) -> &SynError {
&self.0
}
pub fn to_compile_error(&self) -> TokenStream {
self.0.to_compile_error()
}
pub fn into_compile_error(self) -> TokenStream {
self.0.to_compile_error()
}
}
impl From<Error> for SynError {
fn from(err: Error) -> Self {
err.0
}
}
impl From<SynError> for Error {
fn from(err: SynError) -> Self {
Self(err)
}
}
pub type Result<T> = std::result::Result<T, Error>;