extends_rs/lib.rs
1mod extends;
2extern crate proc_macro;
3extern crate proc_macro2;
4use proc_macro::TokenStream;
5extern crate pest;
6#[macro_use]
7extern crate pest_derive;
8
9
10 ///
11 /// 实现继承struct 内部的属性与impl 函数,不建议用在复杂的结构体作为父级
12 /// 使用:
13 /// #[extends_struct(derive="Debug,Clone"&&extends="rsdata::dbs::arbatis::base_struct::BaseDO@struct")]
14 /// struct 子结构体{
15 /// 子结构体必须要有内容
16 /// }
17 /// 会持续更新,不过基于实际应用开发变更,之后会被实现 IOC AOP Single thread基于属性宏的实现 底部 基于 once,dashMap,parking_lot,pest
18 /// 版本0.1.6 将是这个继承方案的稳定版本,后续不会在这个内容上改动,但会有新的内容出现
19 /// ```
20 /// #[extends_struct()];
21 /// ```
22#[allow(warnings)]
23#[proc_macro_attribute]
24pub fn extends_struct(_attr: TokenStream, _input: TokenStream) -> TokenStream {
25 extends::all_extends::impl_extends(_attr, _input)
26}
27
28
29
30#[test]
31fn name() {
32 extends::all_extends::path_split("rsdata::dbs::arbatis::base_struct::BaseDO@struct".to_string());
33}
34
35
36 //rsdata::dbs::arbatis::base_struct::BaseDO*struct
37 //同级crate 中 rsdata/src/dbs/arbatis/base_struct.rs struct BaseDO
38 //如果不存在向上一级寻找 仅1次
39 // #[extends_struct(derive="Debug,Clone"&&extends="rsdata::dbs::arbatis::base_struct::BaseDO*struct")]
40 // struct bbc {
41 // pub a: Option<i8>,
42 // }
43
44 // #[test]
45 // fn showa() {
46 // println!("{:#?}", bbc::new_none());
47 // let mut a = bbc::new_none();
48 // a.result = Some(false);
49 // println!("{:#?}", a);
50 // println!("aaffff:{:?}", bbc::get_struct_attr_str());
51
52 // }