#constructor-macro #default #macro #constructor

no-std default-constructor

Macros for creating pseudo-dsls that constructs structs through default construction and field conversion

11 releases (4 breaking)

0.5.1 Nov 28, 2024
0.5.0 Nov 28, 2024
0.4.2 Jul 30, 2024
0.3.0 Jun 8, 2024
0.1.3 Apr 18, 2024

#459 in Rust patterns

Download history 1/week @ 2024-08-25 1/week @ 2024-09-01 14/week @ 2024-09-22 1/week @ 2024-09-29 1/week @ 2024-10-13 9/week @ 2024-11-03 1/week @ 2024-11-10 252/week @ 2024-11-24 32/week @ 2024-12-01

285 downloads per month
Used in 2 crates

MIT/Apache

10KB
119 lines

default-constructor

Macros for creating pseudo-dsls that constructs structs through default construction and field conversion.

Motivation

This crates is primary designed for bevy where constructing large bundles with ..Default::default() is common.

Syntax

Take construct! that uses Into.

construct! {
    Student {
        name: "Timmy",
        age: 10,
        father: Parent {
            name: "Tommy",
            age: 42
        }
    }
}

This expands to

Student {
    name: Into::into("Timmy"),
    age: Into::into(10),
    father: construct! {
        Parent {
            name: "Tommy",
            age: 42
        }
    }
    ..Default::default()
}

The macro is recursive on nested struct declarations, if the behavior is not desired, wrap nested structs in brackets.

construct! {
    Student {
        name: "Timmy",
        age: 10,
        father: { Parent {
            name: "Tommy",
            age: 42
        }}
    }
}

Tuple Construction

To create a tuple, concatenate multiple structs with comma.

construct! {
    Student {
        name: "Timmy",
        age: 10,
    },
    Son::<2> {
        of: "Tommy"
    },
    Age(16),
}

Meta Constructor

The meta constructor macro allows you to define your own macro with custom configurations.

See documentation on meta_default_constructor! for details.

InferInto

InferInto allows the user to bypass the orphan rule to create conversions.

By default we provide i32 (integer literal) to all numeric types and i64 -> f64 in addition to the standard From and Into.

If multiple conversion paths are found, the conversion will fail, thus failing the infer_construct macro.

ChangeLog

  • 0.4

    • meta_default_constructor no longer takes a list of imports as the first argument.
    • meta_default_constructor can now create tuples by chaining with comma.
  • 0.5

    Made changes to fit bevy 0.15's patterns.

    • No longer treats Ident as Ident::default().
    • No longer treats snake case functions as structs.
    • All non-struct patterns falls through the macro.

License

License under either of

Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0) MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) at your option.

Contribution

Contributions are welcome!

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~135KB