From 18a281d034424b13fa6605bfc1c55e5a68635948 Mon Sep 17 00:00:00 2001 From: Mike Manfredi Date: Wed, 26 Feb 2025 16:43:48 +0000 Subject: [PATCH] restoring mod name --- .../src/service_tables_macro.rs | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/rust/psibase_macros/psibase-macros-lib/src/service_tables_macro.rs b/rust/psibase_macros/psibase-macros-lib/src/service_tables_macro.rs index 3d2856c0c..2996afe27 100644 --- a/rust/psibase_macros/psibase-macros-lib/src/service_tables_macro.rs +++ b/rust/psibase_macros/psibase-macros-lib/src/service_tables_macro.rs @@ -1,5 +1,6 @@ mod tables; +use darling::{ast::NestedMeta, Error, FromMeta}; use proc_macro2::TokenStream; use proc_macro_error::{abort, emit_error}; use quote::quote; @@ -7,10 +8,35 @@ use std::{collections::HashMap, str::FromStr}; use syn::{Ident, Item, ItemMod, Type}; use tables::{is_table_attr, process_service_tables}; -pub fn service_tables_macro_impl(_attr: TokenStream, item: TokenStream) -> TokenStream { - let options_psibase_mod = String::from("psibase"); +#[derive(Debug, FromMeta)] +#[darling(default)] +pub struct Options { + pub psibase_mod: String, +} + +impl Default for Options { + fn default() -> Self { + Options { + psibase_mod: "psibase".into(), + } + } +} + +pub fn service_tables_macro_impl(attr: TokenStream, item: TokenStream) -> TokenStream { + let attr_args = match NestedMeta::parse_meta_list(attr) { + Ok(v) => v, + Err(e) => { + return TokenStream::from(Error::from(e).write_errors()); + } + }; + let options: Options = match Options::from_list(&attr_args) { + Ok(val) => val, + Err(err) => { + return err.write_errors().into(); + } + }; + let psibase_mod = proc_macro2::TokenStream::from_str(&options.psibase_mod).unwrap(); - let psibase_mod = proc_macro2::TokenStream::from_str(&options_psibase_mod).unwrap(); let item = syn::parse2::(item).unwrap(); match item { Item::Mod(impl_mod) => process_mod(&psibase_mod, impl_mod),