1use quote::ToTokens;
4use syn::spanned::Spanned;
5
6pub fn impossible(span: proc_macro2::Span) -> proc_macro2::TokenStream {
8 generic_error("Impossible error.", span)
9}
10
11pub 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
19pub 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
31pub fn unknown_property(prop: crate::component::PropertyValue) -> proc_macro2::TokenStream {
33 generic_error(format!("Unknown property {}", prop.name), prop.name.span())
34}
35
36pub 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}