//! E-UTILS
//! # Random 工具宏
//!
//! # Exmaple `Nanoid`
//! ```no_run
//! fn main() {
//!     use e_utils::algorithm;
//!     println!("nanoid -> {}", algorithm!(nanoid));
//!     println!("nanoid 16bytes -> {}", algorithm!(nanoid 16));
//!     println!("nanoid 16bytes -> {}", algorithm!(nanoid 16));
//!     println!("nanoid 10bytes [alphabet:expr] -> {}", algorithm!(nanoid 16, &['1', 'b', 'c', '7']));
//!     println!("nanoid unsafe 10bytes -> {}", algorithm!(nanoid unsafe 10));
//!     println!("nanoid unsafe 10bytes [alphabet:expr]-> {}", algorithm!(nanoid unsafe 10, &['1','0']));
//! }
//! ```
//!
//! # Exmaple `random`
//! ```no_run
//! fn main() {
//!    use e_utils::algorithm;
//!    println!("random bool -> {}", algorithm!());
//!    println!("random type -> {}", algorithm!(#u32));
//!    println!("random type[] -> {:?}", algorithm!([u32; 10]));
//!    println!("random range 0-13 -> {}", algorithm!(13));
//!    println!("random range -> {}", algorithm!(0i32..13));
//!    println!("random rgb range -> {:?}", algorithm!(rgb 100,255));
//! }
//! ```

#![allow(
  clippy::cognitive_complexity,
  clippy::large_enum_variant,
  clippy::module_inception,
  clippy::needless_doctest_main
)]
#![warn(
  missing_debug_implementations,
  missing_docs,
  rust_2018_idioms,
  unreachable_pub
)]
#![deny(unused_must_use)]
#![doc(test(
  no_crate_inject,
  attr(deny(warnings, rust_2018_idioms), allow(dead_code, unused_variables))
))]
/// Macros
#[macro_use]
#[path = "./macros.rs"]
pub mod macros;
/// Parse
#[path = "./parse.rs"]
pub mod parse;
/// Result
#[path = "./res.rs"]
pub mod res;
pub use res::*;

cfg_fs! {
  /// fs
  pub mod fs;
}
/// 算法
pub mod algorithm;

cfg_ui! {
  /// UI窗口
  #[cfg(target_os = "windows")]
  pub mod ui;
}

cfg_macros! {
  pub use e_macros::*;
}

/// 系统操作
pub mod system;

cfg_images! {
  /// 图像
  pub mod images;
}

/// Http
pub mod http;

cfg_dialog!{
  /// 对话窗口
  pub mod dialog;
}