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