| // Copyright 2024, Linaro Limited |
| // Author(s): Manos Pitsidianakis <manos.pitsidianakis@linaro.org> |
| // SPDX-License-Identifier: GPL-2.0-or-later |
| |
| use proc_macro::TokenStream; |
| use quote::quote; |
| use syn::{parse_macro_input, DeriveInput}; |
| |
| #[proc_macro_derive(Object)] |
| pub fn derive_object(input: TokenStream) -> TokenStream { |
| let input = parse_macro_input!(input as DeriveInput); |
| let name = input.ident; |
| |
| let expanded = quote! { |
| ::qemu_api::module_init! { |
| MODULE_INIT_QOM => unsafe { |
| ::qemu_api::bindings::type_register_static(&<#name as ::qemu_api::definitions::ObjectImpl>::TYPE_INFO); |
| } |
| } |
| }; |
| |
| TokenStream::from(expanded) |
| } |