[][src]Crate multi_structs

A macro for generating a merged struct from multiple sub-structs.

Example

use multi_structs::multi_structs;

multi_structs! {
    /// The merged struct.
    #[derive(Debug)]
    pub struct Merged {
        /// Foo
        #[derive(Debug)]
        pub foo: struct Foo {
            /// a
            pub a: i32,
            /// b
            pub b: i64,
        }
        /// Bar
        #[derive(Debug)]
        pub bar: struct Bar {
            /// c
            pub c: usize,
            /// d
            pub d: String,
        }
    }
}

fn main() {
    let foo = Foo { a: 1, b: 2 };
    let bar = Bar { c: 3, d: "aaa".to_string() };
    println!("{:?}, {:?}", foo, bar);
    let merged = Merged::new(foo, bar);
    println!("{:?}", merged);
    let (foo, bar) = merged.split();
    println!("{:?}, {:?}", foo, bar);
}

See example_generated for documentation of code generated by the above multi_structs! expansion.

Attributes

Attributes can be attached to any struct and field involved.

Methods

The following methods are defined for the merged struct:

  • new: create the new merged struct from multiple sub-structs.
  • split: split the merged struct into the sub-structs.

Visibility

The visibility of structs and fields is taken directly from their definitions. For the generated methods new and split, the visibility of the merged struct is assumed.

Modules

example_generated

This module shows an example of code generated by the macro. IT MUST NOT BE USED OUTSIDE THIS CRATE.

Macros

multi_structs