feat: generate compile error instead of panicing when macro is used on

unsupported item
This commit is contained in:
2026-01-24 14:15:46 +01:00
parent ce70ea4365
commit 5427bdffe7

View File

@@ -1,7 +1,7 @@
#![doc = include_str!("../README.md")] #![doc = include_str!("../README.md")]
use proc_macro::TokenStream; use proc_macro::TokenStream;
use syn::{parse_macro_input, Item}; use syn::{parse_macro_input, spanned::Spanned, Error, Item};
mod expand; mod expand;
mod utils; mod utils;
@@ -32,12 +32,17 @@ mod utils;
/// [`Serialize`]: https://docs.rs/serde/*/serde/trait.Serialize.html /// [`Serialize`]: https://docs.rs/serde/*/serde/trait.Serialize.html
/// [`Deserialize`]: https://docs.rs/serde/*/serde/trait.Deserialize.html /// [`Deserialize`]: https://docs.rs/serde/*/serde/trait.Deserialize.html
#[proc_macro_attribute] #[proc_macro_attribute]
pub fn serde_inline_default(_attr: TokenStream, input: TokenStream) -> TokenStream { pub fn serde_inline_default(attr: TokenStream, input: TokenStream) -> TokenStream {
let item = parse_macro_input!(input as Item); let item = parse_macro_input!(input as Item);
match item { match item {
Item::Struct(s) => expand::expand_struct(s), Item::Struct(s) => expand::expand_struct(s),
Item::Enum(e) => expand::expand_enum(e), Item::Enum(e) => expand::expand_enum(e),
_ => panic!("can only be used on structs and enums"), _ => Error::new(
proc_macro2::TokenStream::from(attr).span(),
"can only be used on structs and enums",
)
.to_compile_error()
.into(),
} }
} }