mod_interface_meta/lib.rs
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 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
#![ 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/mod_interface_meta/latest/mod_interface_meta/" ) ]
#![ doc = include_str!( concat!( env!( "CARGO_MANIFEST_DIR" ), "/", "Readme.md" ) ) ]
#![ warn( dead_code ) ]
// /// Derives.
// layer derive;
// own use super::derive;
// // xxx : change to remove need to write explicitly that
// xxx : change to remove need to write explicitly that
// crate::mod_interface!
// {
// /// Derives.
// layer derive;
// own use super::derive; // xxx : change to remove need to write explicitly that
// }
// xxx : clean up, ad solve problems
// - example based on simpified version of test::layer_have_layer with single sublayer
// - example with attribute `#![ debug ]`
// xxx : write good description and the main use-case
// xxx : does not work. make it working
// use super::test::{ compiletime, helper, smoke_test };
// // xxx : eliminate need to do such things, putting itself to proper category
// exposed use super::test::compiletime;
// exposed use super::test::helper;
// exposed use super::test::smoke_test;
// crate::mod_interface!
// {
// // xxx : make it working
// // exposed use super;
// exposed use super::super::compiletime;
// own use
// {
// *
// };
// }
// xxx : make use proper_path_tools::own::path working
// xxx : put modular files into a namespace `file` maybe
// #[ cfg( feature = "enabled" ) ]
// #[ path = "." ]
// mod file
// {
// use super::*;
// pub mod tokens;
// pub mod typ;
// pub mod item_struct;
// }
// xxx : check
//
// - does not work
// exposed use
// {
// ::former::Former,
// ::former::Assign,
// };
//
// - work
//
// exposed use ::former::
// {
// Former,
// Assign,
// };
// xxx : inherit all entities, somehow
//
// pub mod ca;
//
// crate::mod_interface!
// {
// // #![ debug ]
//
// // xxx : syntax for that, please
// use super::ca;
// own use super::ca::own::*;
//
// // /// Commands aggregator library.
// // layer ca;
// }
mod impls;
#[ allow( unused_imports ) ]
use impls::exposed::*;
mod record;
use record::exposed::*;
mod visibility;
use visibility::exposed::*;
mod use_tree;
use use_tree::exposed::*;
///
/// Protocol of modularity unifying interface of a module and introducing layers.
///
#[ cfg( feature = "enabled" ) ]
#[ proc_macro ]
pub fn mod_interface( input : proc_macro::TokenStream ) -> proc_macro::TokenStream
{
let result = impls::mod_interface( input );
match result
{
Ok( stream ) => stream.into(),
Err( err ) => err.to_compile_error().into(),
}
}
/*
mod_interface!
{
pub mod file1;
pub mod file2;
private mod micro_private;
own mod micro_own;
orphan mod micro_orphan;
exposed mod micro_exposed;
prelude mod micro_prelude;
use prelude_file::*;
}
private < protected < orphan < exposed < prelude
itself itself its parent its inter-module its inter-module
private public public public public
micro-module < meso-module < macro-module < inter-module
*/