# `mods!`
Simpler module declaration, brought to you by [@NikolaiVazquez]!
This library enables you to declare modules in ways the current syntax doesn't
allow.
## Examples
To declare multiple public modules, simply place `pub` before a module list:
```rust
mods::mods! {
pub puppy, kitty;
}
```
This works for all visibility modifiers:
```rust
mods::mods! {
pub a, b; // Visible anywhere, even outside the module
pub(crate) c, d; // Visible anywhere within the crate
pub(super) e, f; // Visible to the parent module
g, h; // Visible to the current module
}
```
Without the `mods!` macro, the same code is much less succinct. This is what the
macro expands out to:
```rust
pub mod a;
pub mod b;
pub(crate) mod c;
pub(crate) mod d;
pub(super) mod e;
pub(super) mod f;
mod g;
mod h;
```
## Installation
This crate is available [on crates.io][crate] and can be used by adding the
following to your project's [`Cargo.toml`]:
```toml
[dependencies]
mods = "1.0.0"
```
### Minimum Supported Rust Version (MSRV)
This library requires Rust 1.9.0 as the minimum version and will work with all
subsequent versions.
This is because previous versions can't have `mod x;` declarations within
submodules [When testing this](https://github.com/nvzqz/mods/runs/508242550) we
get an error complaining that the module file is not inside the directory "src".
### Rust 2015
If you're not using [Rust 2018], add this to your crate root (`main.rs` or
`lib.rs`):
```rust
#[macro_use]
extern crate mods;
```
You can then use the macro directly from anywhere:
```rust
mods! {
pub puppy, kitty;
}
```
## Wishful Thinking
It would be wonderful if we could instead have:
```rust
pub mod puppy, kitty;
```
Or a syntax that matches `use` imports:
```rust
pub mod {puppy, kitty};
```
## Changes
See [`CHANGELOG.md`] for an exhaustive list of what has changed from one version
to another.
## License
This project is released under either:
- [MIT License](https://github.com/nvzqz/mods/blob/master/LICENSE-MIT)
- [Apache License (Version 2.0)](https://github.com/nvzqz/mods/blob/master/LICENSE-APACHE)
[@NikolaiVazquez]: https://twitter.com/NikolaiVazquez
[`Cargo.toml`]: https://doc.rust-lang.org/cargo/reference/manifest.html
[`CHANGELOG.md`]: https://github.com/nvzqz/mods/blob/master/CHANGELOG.md
[crate]: https://crates.io/crates/mods
[Rust 2018]: https://blog.rust-lang.org/2018/12/06/Rust-1.31-and-rust-2018.html#rust-2018