inter_struct_codegen/lib.rs
1mod error;
2mod generate;
3mod helper;
4mod module;
5mod parse;
6
7#[cfg(feature = "debug")]
8mod debug;
9
10use proc_macro::TokenStream;
11
12/// Implement the `Into` trait on this struct.
13///
14/// `struct.rs`
15/// ```rust, ignore
16/// use inter_struct::prelude::*;
17///
18/// pub struct Target {
19/// pub test: String,
20/// }
21///
22/// #[derive(StructInto)]
23/// #[struct_into(["crate::structs::Target"])]
24/// pub struct Test {
25/// pub test: String,
26/// }
27/// ```
28#[proc_macro_derive(StructInto, attributes(struct_into))]
29pub fn struct_into(struct_ast: TokenStream) -> TokenStream {
30 generate::into::struct_into_inner(struct_ast)
31}
32
33/// Implement the `Into` trait on this struct with `Default::default` for missing fields.
34///
35/// `struct.rs`
36/// ```rust, ignore
37/// use inter_struct::prelude::*;
38///
39/// pub struct Target {
40/// pub test: String,
41/// }
42///
43/// #[derive(StructIntoDefault)]
44/// #[struct_into_default(["crate::structs::Target"])]
45/// pub struct Test {
46/// pub test: String,
47/// }
48/// ```
49///
50#[proc_macro_derive(StructIntoDefault, attributes(struct_into_default))]
51pub fn struct_into_default(struct_ast: TokenStream) -> TokenStream {
52 generate::into::struct_into_default_inner(struct_ast)
53}
54
55/// Implement the `StructMerge` trait on this struct.
56///
57/// `struct.rs`
58/// ```rust, ignore
59/// use inter_struct::prelude::*;
60///
61/// pub struct Target {
62/// pub test: String,
63/// }
64///
65/// #[derive(StructMerge)]
66/// #[struct_merge("crate::structs::Target")]
67/// pub struct Test {
68/// pub test: String,
69/// }
70/// ```
71#[proc_macro_derive(StructMerge, attributes(struct_merge))]
72pub fn struct_merge(struct_ast: TokenStream) -> TokenStream {
73 generate::merge::struct_merge_inner(struct_ast)
74}
75
76/// Implement the `StructMergeRef` trait on this struct.
77///
78/// `struct.rs`
79/// ```rust, ignore
80/// use inter_struct::prelude::*;
81///
82/// pub struct Target {
83/// pub test: String,
84/// }
85///
86/// #[derive(StructMergeRef)]
87/// #[struct_merge_ref(["crate::structs::Target"])]
88/// pub struct Test {
89/// pub test: String,
90/// }
91/// ```
92#[proc_macro_derive(StructMergeRef, attributes(struct_merge_ref))]
93pub fn struct_merge_ref(struct_ast: TokenStream) -> TokenStream {
94 generate::merge::struct_merge_ref_inner(struct_ast)
95}