<div align="center">
<img src="./logo.png" alt="Fundle Macros Logo" width="128">
# Fundle Macros
[](https://crates.io/crates/fundle_macros)
[](https://docs.rs/fundle_macros)
[](https://crates.io/crates/fundle_macros)
[](https://github.com/microsoft/oxidizer/actions)
[](https://codecov.io/gh/microsoft/oxidizer)
[](../LICENSE)
</div>
* [Summary](#summary)
* [Macros](#macros)
* [`#[bundle]`](#bundle)
* [`#[deps]`](#deps)
* [`#[newtype]`](#newtype)
## Summary
Procedural macros to support the [`fundle`](https://docs.rs/fundle) crate. See `fundle` for more information.
## Macros
### `#[bundle]`
Transforms structs into type-safe builders with dependency injection support.
```rust
#[fundle::bundle]
pub struct AppState {
logger: Logger,
database: Database,
}
```
Generates builder methods and a select macro for dependency access.
### `#[deps]`
Creates dependency parameter structs with automatic `From<T>` implementations.
```rust
#[fundle::deps]
pub struct ServiceDeps {
logger: Logger,
database: Database,
}
```
Generates `From<T>` where `T: AsRef<Logger> + AsRef<Database>`.
### `#[newtype]`
Creates newtype wrappers with automatic trait implementations.
```rust
#[newtype]
pub struct DatabaseLogger(Logger);
```
Generates `Clone`, `From<T: AsRef<Logger>>`, `Deref`, and `DerefMut`.
<div style="font-size: 75%" ><hr/>
This crate was developed as part of [The Oxidizer Project](https://github.com/microsoft/oxidizer).
</div>