diff --git a/near-sdk-macros/src/lib.rs b/near-sdk-macros/src/lib.rs index d6039ea45..67748b9b2 100644 --- a/near-sdk-macros/src/lib.rs +++ b/near-sdk-macros/src/lib.rs @@ -10,7 +10,26 @@ use proc_macro::TokenStream; use self::core_impl::*; use proc_macro2::{Ident, Span}; use quote::{quote, ToTokens}; -use syn::{parse_quote, ImplItem, ItemEnum, ItemImpl, ItemStruct, ItemTrait, WhereClause}; +use syn::{parse_quote, parse_macro_input, ImplItem, ItemEnum, ItemImpl, ItemStruct, ItemTrait, WhereClause, DeriveInput}; + +#[proc_macro_attribute] +pub fn my_near(attr: TokenStream, item: TokenStream) -> TokenStream { + let input = parse_macro_input!(item as DeriveInput); + + let expanded = quote! { + // Call the derive macro you want to use + #[derive(Clone, Serialize, Deserialize, BorshDeserialize, BorshSerialize, JsonSchema)] + #[serde(crate = "near_sdk::serde")] + #[borsh(crate = "near_sdk::borsh")] + #[schemars(crate = "near_sdk::schemars")] + // Include the original input + #input + }; + + eprintln!("{}", expanded); + + TokenStream::from(expanded) +} /// This attribute macro is used on a struct and its implementations /// to generate the necessary code to expose `pub` methods from the contract as well diff --git a/near-sdk/src/lib.rs b/near-sdk/src/lib.rs index 5042b7533..4986d91e8 100644 --- a/near-sdk/src/lib.rs +++ b/near-sdk/src/lib.rs @@ -10,7 +10,7 @@ extern crate quickcheck; #[cfg(feature = "abi")] pub use near_sdk_macros::NearSchema; pub use near_sdk_macros::{ - ext_contract, near_bindgen, BorshStorageKey, EventMetadata, FunctionError, PanicOnDefault, + ext_contract, near_bindgen, my_near, BorshStorageKey, EventMetadata, FunctionError, PanicOnDefault, }; pub mod store;