12
libclide-macros/Cargo.toml
Normal file
12
libclide-macros/Cargo.toml
Normal file
@@ -0,0 +1,12 @@
|
||||
[package]
|
||||
name = "libclide-macros"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[lib]
|
||||
proc-macro = true
|
||||
|
||||
[dependencies]
|
||||
syn = { version = "2", features = ["full"] }
|
||||
quote = "1"
|
||||
proc-macro2 = "1"
|
||||
24
libclide-macros/src/lib.rs
Normal file
24
libclide-macros/src/lib.rs
Normal file
@@ -0,0 +1,24 @@
|
||||
// SPDX-FileCopyrightText: 2026, Shaun Reed <shaunrd0@gmail.com>
|
||||
//
|
||||
// SPDX-License-Identifier: GNU General Public License v3.0 or later
|
||||
|
||||
use proc_macro::TokenStream;
|
||||
use quote::quote;
|
||||
use syn::{ItemStruct, parse_macro_input};
|
||||
|
||||
#[proc_macro_derive(Loggable)]
|
||||
pub fn loggable(item: TokenStream) -> TokenStream {
|
||||
let input = parse_macro_input!(item as ItemStruct);
|
||||
let struct_name = &input.ident;
|
||||
let generics = &input.generics;
|
||||
|
||||
let (impl_generics, type_generics, where_clause) = generics.split_for_impl();
|
||||
let struct_name_str = struct_name.to_string();
|
||||
let expanded = quote! {
|
||||
impl #impl_generics libclide::log::Loggable for #struct_name #type_generics #where_clause {
|
||||
const ID: &'static str = #struct_name_str;
|
||||
}
|
||||
};
|
||||
|
||||
TokenStream::from(expanded)
|
||||
}
|
||||
Reference in New Issue
Block a user