1 stable release

Uses old Rust 2015

1.0.0 Mar 14, 2020

#1580 in Rust patterns

MIT/Apache

11KB
54 lines

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:

mods::mods! {
    pub puppy, kitty;
}

This works for all visibility modifiers:

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:

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 and can be used by adding the following to your project's Cargo.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 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):

#[macro_use]
extern crate mods;

You can then use the macro directly from anywhere:

mods! {
    pub puppy, kitty;
}

Wishful Thinking

It would be wonderful if we could instead have:

pub mod puppy, kitty;

Or a syntax that matches use imports:

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:

No runtime deps