// zotapi-derive - Rust wrapper for Zot API as implemented by Hubzilla // Copyright (C) 2023 Harald Eilertsen // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . use proc_macro::{self, TokenStream}; use quote::*; use syn::DeriveInput; #[proc_macro_derive(ZotAPI)] pub fn zotapi_derive(input: TokenStream) -> TokenStream { let ast = syn::parse(input).unwrap(); impl_zotapi_derive(&ast) } fn impl_zotapi_derive(ast: &DeriveInput) -> TokenStream { let name = &ast.ident; // The identifier of the struct we're called for let out_name = format_ident!("{}Request", name); let gen = quote! { impl ZotAPI<#out_name> for #name { } }; gen.into() }