Skip to content
Snippets Groups Projects

Resolve "create macro durs_core_server!"

Merged Éloïs requested to merge 100-create-macro-durs_core_server into dev
2 files
+ 102
80
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 91
7
@@ -69,6 +69,91 @@ use threadpool::ThreadPool;
/// Number of thread in plugins ThreadPool
pub static THREAD_POOL_SIZE: &'static usize = &2;
#[macro_export]
macro_rules! durs_core_server {
( $closure_inject_cli:expr, $closure_plug:expr ) => {{
duniter_core::main(
env!("CARGO_PKG_NAME"),
env!("CARGO_PKG_VERSION"),
&DursOpt::clap(),
$closure_inject_cli,
$closure_plug,
);
}};
}
#[macro_export]
macro_rules! durs_inject_cli {
( $( $Module:ty ),* ) => {
{
|core| {
$(core.inject_cli_subcommand::<$Module>();)*
}
}
};
}
#[macro_export]
macro_rules! durs_plug {
( [ $( $NetworkModule:ty ),* ], [ $( $Module:ty ),* ] ) => {
{
|core| {
$(core.plug::<$Module>();)*
$(core.plug_network::<$NetworkModule>();)*
}
}
};
}
/*
macro_rules! o_O {
(
$(
$x:expr; [ $( $y:expr ),* ]
);*
) => {
&[ $($( $x + $y ),*),* ]
}
}
macro_rules! vec {
( $( $x:expr ),* ) => {
{
let mut temp_vec = Vec::new();
$(
temp_vec.push($x);
)*
temp_vec
}
};
}*/
/// Durs main function
pub fn main<'b, 'a: 'b, CliFunc, PlugFunc>(
soft_name: &'static str,
soft_version: &'static str,
clap_app: &'a App<'b, 'a>,
mut inject_modules_subcommands: CliFunc,
mut plug_modules: PlugFunc,
) where
'b: 'a,
CliFunc: FnMut(&mut DuniterCore<'a, 'b, DuRsConf>) -> (),
PlugFunc: FnMut(&mut DuniterCore<'a, 'b, DuRsConf>) -> (),
{
// Instantiate duniter core
let mut duniter_core = DuniterCore::<DuRsConf>::new(soft_name, soft_version, clap_app, 0);
// Inject modules subcommands
inject_modules_subcommands(&mut duniter_core);
// Match user command
if duniter_core.match_user_command() {
// Plug all plugins
plug_modules(&mut duniter_core);
duniter_core.start_core();
}
}
#[derive(Debug, Clone)]
/// User command
pub enum UserCommand {
@@ -149,6 +234,11 @@ impl<'a, 'b: 'a> DuniterCore<'b, 'a, DuRsConf> {
thread_pool: ThreadPool::new(*THREAD_POOL_SIZE),
}
}
/// Inject cli subcommand
pub fn inject_cli_subcommand<M: DuniterModule<DuRsConf, DursMsg>>(&mut self) {
//self.cli_conf = TupleApp(&self.cli_conf.0.clone().subcommand(M::ModuleOpt::clap()));
self.plugins_cli_conf.push(M::ModuleOpt::clap());
}
/// Execute user command
pub fn match_user_command(&mut self) -> bool {
self.match_specialize_user_command(vec![], None, vec![])
@@ -446,19 +536,13 @@ impl<'a, 'b: 'a> DuniterCore<'b, 'a, DuRsConf> {
}
}
/// Inject cli subcommand
pub fn inject_cli_subcommand<M: DuniterModule<DuRsConf, DursMsg>>(&mut self) {
//self.cli_conf = TupleApp(&self.cli_conf.0.clone().subcommand(M::ModuleOpt::clap()));
self.plugins_cli_conf.push(M::ModuleOpt::clap());
}
/// Plug a module
pub fn plug<M: DuniterModule<DuRsConf, DursMsg>>(&mut self) {
self.plug_::<M>(false);
}
/// Plug a module
fn plug_<M: DuniterModule<DuRsConf, DursMsg>>(&mut self, is_network_module: bool) {
pub fn plug_<M: DuniterModule<DuRsConf, DursMsg>>(&mut self, is_network_module: bool) {
let enabled = enabled::<DuRsConf, DursMsg, M>(&self.soft_meta_datas.conf);
if enabled {
if let Some(UserCommand::Start()) = self.user_command {
Loading