brisk_it/
errors.rs

1//! Convenient function to generate errors
2
3use quote::ToTokens;
4use syn::spanned::Spanned;
5
6/// Errors that are caused by bugs.
7pub fn impossible(span: proc_macro2::Span) -> proc_macro2::TokenStream {
8    generic_error("Impossible error.", span)
9}
10
11/// Generic error.
12pub fn generic_error<T: std::fmt::Display>(
13    text: T,
14    span: proc_macro2::Span,
15) -> proc_macro2::TokenStream {
16    syn::Error::new(span, text).into_compile_error()
17}
18
19/// Errors used for unexpected property values
20pub fn unexpected(prop_expr: &syn::Expr, explanation: &str) -> proc_macro2::TokenStream {
21    generic_error(
22        format!(
23            "Unexpected {}: {},",
24            prop_expr.to_token_stream(),
25            explanation
26        ),
27        prop_expr.span(),
28    )
29}
30
31/// Errors used for unknown properties
32pub fn unknown_property(prop: crate::component::PropertyValue) -> proc_macro2::TokenStream {
33    generic_error(format!("Unknown property {}", prop.name), prop.name.span())
34}
35
36/// Errors used for missing required properties
37pub fn missing_property(component_name: &syn::Ident, prop_name: &str) -> proc_macro2::TokenStream {
38    generic_error(
39        format!("Missing required property '{}'", prop_name),
40        component_name.span(),
41    )
42}