brisk-it 0.8.1

brisk-it is the core library of the brisk declarative engine.
Documentation
//! Convenient function to generate errors

use quote::ToTokens;
use syn::spanned::Spanned;

/// Errors that are caused by bugs.
pub fn impossible(span: proc_macro2::Span) -> proc_macro2::TokenStream {
    generic_error("Impossible error.", span)
}

/// Generic error.
pub fn generic_error<T: std::fmt::Display>(
    text: T,
    span: proc_macro2::Span,
) -> proc_macro2::TokenStream {
    syn::Error::new(span, text).into_compile_error()
}

/// Errors used for unexpected property values
pub fn unexpected(prop_expr: &syn::Expr, explanation: &str) -> proc_macro2::TokenStream {
    generic_error(
        format!(
            "Unexpected {}: {},",
            prop_expr.to_token_stream(),
            explanation
        ),
        prop_expr.span(),
    )
}

/// Errors used for unknown properties
pub fn unknown_property(prop: crate::component::PropertyValue) -> proc_macro2::TokenStream {
    generic_error(format!("Unknown property {}", prop.name), prop.name.span())
}

/// Errors used for missing required properties
pub fn missing_property(component_name: &syn::Ident, prop_name: &str) -> proc_macro2::TokenStream {
    generic_error(
        format!("Missing required property '{}'", prop_name),
        component_name.span(),
    )
}