#builder-pattern #fundamental #general-purpose

无 std mod_interface

模块化协议,统一模块接口并引入层

35 个版本 (21 个破坏性更新)

新增 0.23.0 2024 年 8 月 16 日
0.22.0 2024 年 6 月 29 日
0.21.0 2024 年 5 月 31 日
0.17.0 2024 年 3 月 26 日
0.1.16 2022 年 7 月 19 日

590开发工具 中排名

Download history 564/week @ 2024-04-27 728/week @ 2024-05-04 4619/week @ 2024-05-11 1856/week @ 2024-05-18 3569/week @ 2024-05-25 2809/week @ 2024-06-01 1082/week @ 2024-06-08 661/week @ 2024-06-15 412/week @ 2024-06-22 1441/week @ 2024-06-29 327/week @ 2024-07-06 1670/week @ 2024-07-13 847/week @ 2024-07-20 915/week @ 2024-07-27 357/week @ 2024-08-03 1027/week @ 2024-08-10

每月 3,272 次下载
93 个crate中使用(直接使用 9 个)

MIT 许可证

23KB
163 代码行

模块 :: mod_interface

experimental rust-status docs.rs discord

模块化协议,统一模块接口并引入层。

基本用例

包含代码的库文件 inner.rs

pub( crate ) mod private
{
  /// Routine of inner module.
  pub fn inner_is() -> bool
  {
    true
  }
}

//

mod_interface::mod_interface!
{
  prelude use inner_is;
}

生成模块和命名空间的 主文件 main.rs

use mod_interface::mod_interface;

//

fn main()
{
  assert_eq!( prelude::inner_is(), inner::prelude::inner_is() );
}

//

mod_interface::mod_interface!
{
  /// Inner.
  layer inner;
}

它生成代码

use mod_interface::mod_interface;

//

fn main()
{
  assert_eq!( prelude::inner_is(), inner::prelude::inner_is() );
}

//

/// Inner.
pub mod inner
{
  pub( crate ) mod private
  {
    /// Routine of inner module.
    pub fn inner_is() -> bool { true }
  }

  /// Own namespace of the module.
  pub mod own
  {
    pub use orphan::*;
  }
  pub use own::*;

  /// Orphan namespace of the module.
  pub mod orphan
  {
    pub use exposed::*;
  }

  /// Exposed namespace of the module.
  pub mod exposed
  {
    pub use prelude::*;
  }

  /// Prelude to use essentials: `use my_module::prelude::*`.
  pub mod prelude
  {
    pub use private::inner_is;
  }
}

/// Own namespace of the module.
#[ allow( unused_imports ) ]
pub mod own
{
  use super::*;
  pub use orphan::*;
  pub use super::inner::orphan::*;
}
pub use own::*;

/// Orphan namespace of the module.
#[ allow( unused_imports ) ]
pub mod orphan
{
  use super::*;
  pub use exposed::*;
}

/// Exposed namespace of the module.
#[ allow( unused_imports ) ]
pub mod exposed
{
  use super::*;
  pub use prelude::*;
  pub use super::inner::exposed::*;
}

/// Prelude to use essentials: `use my_module::prelude::*`.
#[ allow( unused_imports ) ]
pub mod prelude
{
  use super::*;
  pub use super::inner::prelude::*;
}

调试

要调试模块接口,请在 mod_interface 宏中使用指令 #![ debug ]。让我们更新示例的主文件

mod_interface::mod_interface!
{
  #![ debug ]
  /// Inner.
  layer inner;
}

完整示例请见 示例目录

将其添加到您的项目中

cargo add mod_interface

从仓库尝试

git clone https://github.com/Wandalen/wTools
cd wTools
cd examples/mod_interface_trivial
cargo run

从仓库尝试

git clone https://github.com/Wandalen/wTools
cd wTools
cd examples/mod_interface_trivial
cargo run

依赖项

~2.5MB
~49K SLoC