1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
#![ cfg_attr( feature = "no_std", no_std ) ]
#![ doc( html_logo_url = "https://raw.githubusercontent.com/Wandalen/wTools/master/asset/img/logo_v3_trans_square.png" ) ]
#![ doc( html_favicon_url = "https://raw.githubusercontent.com/Wandalen/wTools/alpha/asset/img/logo_v3_trans_square_icon_small_v2.ico" ) ]
#![ doc( html_root_url = "https://docs.rs/implements/latest/implements/" ) ]
// #![ deny( rust_2018_idioms ) ]
// #![ deny( missing_debug_implementations ) ]
// #![ deny( missing_docs ) ]
//!
//! Macro to answer the question: does it implement a trait?
//!
#![ doc = include_str!( concat!( env!( "CARGO_MANIFEST_DIR" ), "/", "Readme.md" ) ) ]
// #[ macro_use ]
#[ cfg( feature = "enabled" ) ]
mod implements_impl;
/// Internal namespace.
#[ cfg( feature = "enabled" ) ]
pub( crate ) mod private
{
///
/// Macro `implements` to answer the question: does it implement a trait?
///
/// ### Basic use-case.
/// ```
/// use implements::*;
///
/// dbg!( implements!( 13_i32 => Copy ) );
/// // < implements!( 13_i32 => Copy ) : true
/// dbg!( implements!( Box::new( 13_i32 ) => Copy ) );
/// // < implements!( 13_i32 => Copy ) : false
/// ```
#[ macro_export ]
macro_rules! implements
{
( $( $arg : tt )+ ) =>
{
$crate::_implements!( $( $arg )+ );
}
}
///
/// Macro `instance_of` to answer the question: does it implement a trait? Alias of the macro `implements`.
///
/// ### Basic use-case.
/// ```
/// use implements::instance_of;
///
/// dbg!( instance_of!( 13_i32 => Copy ) );
/// // < instance_of!( 13_i32 => Copy ) : true
/// dbg!( instance_of!( Box::new( 13_i32 ) => Copy ) );
/// // < instance_of!( 13_i32 => Copy ) : false
/// ```
#[ macro_export ]
macro_rules! instance_of
{
( $( $arg : tt )+ ) =>
{
$crate::_implements!( $( $arg )+ );
}
}
pub use implements;
pub use instance_of;
}
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
#[ cfg( feature = "enabled" ) ]
pub use protected::*;
/// Protected namespace of the module.
#[ cfg( feature = "enabled" ) ]
pub mod protected
{
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
pub use super::orphan::*;
}
/// Orphan namespace of the module.
#[ cfg( feature = "enabled" ) ]
pub mod orphan
{
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
pub use super::exposed::*;
}
/// Exposed namespace of the module.
#[ cfg( feature = "enabled" ) ]
pub mod exposed
{
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
pub use super::prelude::*;
}
/// Prelude to use essentials: `use my_module::prelude::*`.
#[ cfg( feature = "enabled" ) ]
pub mod prelude
{
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
pub use super::private::
{
implements,
instance_of,
};
}