bevy_auto_plugin 0.10.0

Procedural attribute macros for Bevy apps that reduce boilerplate by automatically registering components, resources, events, states, and systems in your plugin's build function.
Documentation
Automatically inserts a plugin as a sub-plugin into the app.

# Parameters
- `plugin = PluginType` - Required unless the `default_plugin` feature is enabled and `#[auto_plugin(default_plugin)]` is in scope. Specifies which plugin should add this plugin.
- `after_build` - Optional. Injects this macro's tokens at the end of the plugin build instead of the start.
- `init | init(SubPluginValue) | init = SubPluginValue` - Optional.
  - ` ` for unit struct sub-plugins. e.g. `YourSubPlugin`
  - `init` for sub-plugins deriving `Default`. e.g. `YourSubPlugin::default()` 
  - `init = ... | init(...)` for custom values of the sub-plugin. e.g. `YourSubPlugin("data")` or `YourSubPlugin { foo: "bar" }`
- `generics(T1, T2, ...)` - Optional. Specifies concrete types for generic parameters.
  When provided, along with impl_plugin_trait, the plugin will be derived with these specific generic parameters.
  Note: Clippy will complain if you have duplicate generic type names. For those you can use named generics: `generics(T1 = ..., T2 = ...)`.

# Notes
- This attribute can be applied to a `use` item; each imported name becomes its own target.
- `use ...::*`, `use ...::self`, and `_` imports are not supported.
- Renames (`as`) are supported and use the local name.
- If you rely on `use` order for plugin ordering, `rustfmt` may reorder the imports; use `#[rustfmt::skip]` to preserve order.
- Registry entries are sorted by file/line/column; within a file, definition order is preserved. Across files, order follows file path, so use `after_build` or explicit plugin ordering when order matters.

# Example
```rust
use bevy::prelude::*;
use bevy_auto_plugin::prelude::*;

#[derive(AutoPlugin)]
#[auto_plugin(impl_plugin_trait)]
struct MyPlugin;

#[derive(AutoPlugin)]
#[auto_plugin(impl_plugin_trait)]
#[auto_add_plugin(plugin = MyPlugin)]
struct MySubPlugin;
```

# Example (with default value)
```rust
use bevy::prelude::*;
use bevy_auto_plugin::prelude::*;

#[derive(AutoPlugin)]
#[auto_plugin(impl_plugin_trait)]
struct MyPlugin;

#[derive(AutoPlugin, Default)]
#[auto_plugin(impl_plugin_trait)]
#[auto_add_plugin(plugin = MyPlugin, init)]
struct MySubPlugin(usize);
```

# Example (with value)
```rust
use bevy::prelude::*;
use bevy_auto_plugin::prelude::*;

#[derive(AutoPlugin)]
#[auto_plugin(impl_plugin_trait)]
struct MyPlugin;

#[derive(AutoPlugin, Default)]
#[auto_plugin(impl_plugin_trait)]
#[auto_add_plugin(plugin = MyPlugin, init = MySubPlugin(42))]
struct MySubPlugin(usize);
```

# Example (with generics)
```rust
use bevy::prelude::*;
use bevy_auto_plugin::prelude::*;

#[derive(AutoPlugin)]
#[auto_plugin(impl_plugin_trait)]
struct MyPlugin;

#[derive(AutoPlugin, Default)]
#[auto_plugin(impl_plugin_trait)]
#[auto_add_plugin(plugin = MyPlugin, generics(usize), init)]
struct FooResourceWithGeneric<T>(T);
```