jsonforge 0.1.0

A Rust procedural macro for generating JSON schema validators from Rust types
Documentation
use proc_macro2::{Span, TokenStream};
use quote::quote_spanned;

pub struct ForgeError {
    span: Span,
    message: String,
}

impl ForgeError {
    pub fn new(span: Span, message: impl Into<String>) -> Self {
        Self {
            span,
            message: message.into(),
        }
    }

    pub fn spanned(span: Span, message: impl Into<String>) -> Self {
        Self::new(span, message)
    }

    pub fn call_site(message: impl Into<String>) -> Self {
        Self::new(Span::call_site(), message)
    }

    pub fn to_compile_error(&self) -> TokenStream {
        let msg = &self.message;
        quote_spanned!(self.span => compile_error!(#msg))
    }
}

impl From<serde_json::Error> for ForgeError {
    fn from(e: serde_json::Error) -> Self {
        Self::call_site(format!("JSON parse error: {e}"))
    }
}

impl From<std::io::Error> for ForgeError {
    fn from(e: std::io::Error) -> Self {
        Self::call_site(format!("I/O error reading JSON file: {e}"))
    }
}

pub type ForgeResult<T> = Result<T, ForgeError>;