From 7a41c1e750d06be12673abd0e4664444e6724895 Mon Sep 17 00:00:00 2001 From: librelois <elois@ifee.fr> Date: Sun, 5 May 2019 00:04:09 +0200 Subject: [PATCH] [feat] module: generate various default conf by currency --- lib/core/conf/src/lib.rs | 37 +++++++++++++++------------ lib/core/core/src/lib.rs | 4 +-- lib/core/module/src/lib.rs | 22 +++++++++++++--- lib/modules/skeleton/lib.rs | 8 +++--- lib/modules/tui/lib.rs | 2 +- lib/modules/ws2p-v1-legacy/src/lib.rs | 27 ++++++++++++++----- lib/modules/ws2p/ws2p/src/lib.rs | 14 +++++----- 7 files changed, 74 insertions(+), 40 deletions(-) diff --git a/lib/core/conf/src/lib.rs b/lib/core/conf/src/lib.rs index 851a69b8..c6066836 100644 --- a/lib/core/conf/src/lib.rs +++ b/lib/core/conf/src/lib.rs @@ -38,7 +38,9 @@ pub mod keys; use dubp_documents::CurrencyName; use dup_crypto::keys::*; use durs_common_tools::fatal_error; -use durs_module::{DursConfTrait, ModuleName, RequiredKeys, RequiredKeysContent}; +use durs_module::{ + DursConfTrait, DursGlobalConfTrait, ModuleName, RequiredKeys, RequiredKeysContent, +}; use rand::Rng; use serde::ser::{Serialize, SerializeStruct, Serializer}; use std::collections::HashSet; @@ -217,6 +219,23 @@ pub enum DuRsGlobalConf { V2(DuRsConfV2), } +impl DursGlobalConfTrait for DuRsGlobalConf { + /// Get currency + fn currency(&self) -> CurrencyName { + match *self { + DuRsGlobalConf::V1(ref conf_v1) => conf_v1.currency.clone(), + DuRsGlobalConf::V2(ref conf_v2) => conf_v2.currency.clone(), + } + } + /// Get node id + fn my_node_id(&self) -> u32 { + match *self { + DuRsGlobalConf::V1(ref conf_v1) => conf_v1.my_node_id, + DuRsGlobalConf::V2(ref conf_v2) => conf_v2.my_node_id, + } + } +} + impl Default for DuRsConf { #[inline] fn default() -> Self { @@ -258,14 +277,6 @@ impl DursConfTrait for DuRsConf { DuRsConf::V2 { .. } => 2, } } - fn currency(&self) -> CurrencyName { - match *self { - DuRsConf::V1(ref conf_v1) => conf_v1.currency.clone(), - DuRsConf::V2 { - ref global_conf, .. - } => global_conf.currency.clone(), - } - } fn set_currency(&mut self, new_currency: CurrencyName) { match *self { DuRsConf::V1(ref mut conf_v1) => conf_v1.currency = new_currency, @@ -275,14 +286,6 @@ impl DursConfTrait for DuRsConf { } => global_conf.currency = new_currency, } } - fn my_node_id(&self) -> u32 { - match *self { - DuRsConf::V1(ref conf_v1) => conf_v1.my_node_id, - DuRsConf::V2 { - ref global_conf, .. - } => global_conf.my_node_id, - } - } fn disable(&mut self, module: ModuleName) { match *self { DuRsConf::V1(ref mut conf_v1) => { diff --git a/lib/core/core/src/lib.rs b/lib/core/core/src/lib.rs index 8bbd0af7..240f9ef7 100644 --- a/lib/core/core/src/lib.rs +++ b/lib/core/core/src/lib.rs @@ -497,9 +497,9 @@ pub fn get_module_conf<M: DursModule<DuRsConf, DursMsg>>( if let Some(module_conf_json) = module_conf_json { let module_user_conf: M::ModuleUserConf = serde_json::from_str(module_conf_json.to_string().as_str())?; - M::generate_module_conf(global_conf, module_user_conf) + M::generate_module_conf(global_conf, Some(module_user_conf)) } else { - Ok(M::ModuleConf::default()) + M::generate_module_conf(global_conf, None) } } diff --git a/lib/core/module/src/lib.rs b/lib/core/module/src/lib.rs index 05cb334f..8db64900 100644 --- a/lib/core/module/src/lib.rs +++ b/lib/core/module/src/lib.rs @@ -100,15 +100,27 @@ impl ToString for ModuleReqFullId { } } +/// Durs global configuration trait +pub trait DursGlobalConfTrait: + Clone + Debug + PartialEq + Serialize + DeserializeOwned + Send + ToOwned +{ + /// Get currency + fn currency(&self) -> CurrencyName; + /// Get node id + fn my_node_id(&self) -> u32; +} + /// Durs configuration trait pub trait DursConfTrait: Clone + Debug + Default + PartialEq + Serialize + DeserializeOwned + Send + ToOwned { /// Durs configuration without modules configuration - type GlobalConf: Clone + Debug + PartialEq + Serialize + DeserializeOwned + Send + ToOwned; + type GlobalConf: DursGlobalConfTrait; /// Get currency - fn currency(&self) -> CurrencyName; + fn currency(&self) -> CurrencyName { + self.get_global_conf().currency() + } /// Disable a module fn disable(&mut self, module: ModuleName); /// Get disabled modules @@ -122,7 +134,9 @@ pub trait DursConfTrait: /// Get modules conf fn modules(&self) -> serde_json::Value; /// Get node id - fn my_node_id(&self) -> u32; + fn my_node_id(&self) -> u32 { + self.get_global_conf().my_node_id() + } /// Set currency fn set_currency(&mut self, new_currency: CurrencyName); /// Change module conf @@ -389,7 +403,7 @@ pub trait DursModule<DC: DursConfTrait, M: ModuleMessage> { /// Generate module configuration fn generate_module_conf( global_conf: &DC::GlobalConf, - module_user_conf: Self::ModuleUserConf, + module_user_conf: Option<Self::ModuleUserConf>, ) -> Result<Self::ModuleConf, ModuleConfError>; /// Define if module have a cli subcommand fn have_subcommand() -> bool { diff --git a/lib/modules/skeleton/lib.rs b/lib/modules/skeleton/lib.rs index c6689737..89cbd042 100644 --- a/lib/modules/skeleton/lib.rs +++ b/lib/modules/skeleton/lib.rs @@ -131,12 +131,14 @@ impl DursModule<DuRsConf, DursMsg> for SkeletonModule { } fn generate_module_conf( _global_conf: &<DuRsConf as DursConfTrait>::GlobalConf, - module_user_conf: Self::ModuleUserConf, + module_user_conf: Option<Self::ModuleUserConf>, ) -> Result<Self::ModuleConf, ModuleConfError> { let mut conf = SkeletonConf::default(); - if let Some(test_fake_conf_field) = module_user_conf.test_fake_conf_field { - conf.test_fake_conf_field = test_fake_conf_field; + if let Some(module_user_conf) = module_user_conf { + if let Some(test_fake_conf_field) = module_user_conf.test_fake_conf_field { + conf.test_fake_conf_field = test_fake_conf_field; + } } Ok(conf) diff --git a/lib/modules/tui/lib.rs b/lib/modules/tui/lib.rs index 620ed14c..88a1a462 100644 --- a/lib/modules/tui/lib.rs +++ b/lib/modules/tui/lib.rs @@ -389,7 +389,7 @@ impl DursModule<DuRsConf, DursMsg> for TuiModule { } fn generate_module_conf( _global_conf: &<DuRsConf as DursConfTrait>::GlobalConf, - _module_user_conf: Self::ModuleUserConf, + _module_user_conf: Option<Self::ModuleUserConf>, ) -> Result<Self::ModuleConf, ModuleConfError> { Ok(TuiConf {}) } diff --git a/lib/modules/ws2p-v1-legacy/src/lib.rs b/lib/modules/ws2p-v1-legacy/src/lib.rs index c1fb22f1..1fa790d5 100644 --- a/lib/modules/ws2p-v1-legacy/src/lib.rs +++ b/lib/modules/ws2p-v1-legacy/src/lib.rs @@ -56,7 +56,7 @@ use crate::ws2p_db::DbEndpoint; use crate::ws_connections::messages::WS2PConnectionMessage; use crate::ws_connections::states::WS2PConnectionState; use crate::ws_connections::*; -use dubp_documents::Blockstamp; +use dubp_documents::{Blockstamp, CurrencyName}; use duniter_network::cli::sync::SyncOpt; use duniter_network::documents::*; use duniter_network::events::*; @@ -344,16 +344,29 @@ impl DursModule<DuRsConf, DursMsg> for WS2PModule { true } fn generate_module_conf( - _global_conf: &<DuRsConf as DursConfTrait>::GlobalConf, - module_user_conf: Self::ModuleUserConf, + global_conf: &<DuRsConf as DursConfTrait>::GlobalConf, + module_user_conf: Option<Self::ModuleUserConf>, ) -> Result<Self::ModuleConf, ModuleConfError> { let mut conf = WS2PConf::default(); - if let Some(outcoming_quota) = module_user_conf.outcoming_quota { - conf.outcoming_quota = outcoming_quota; + if global_conf.currency() == CurrencyName("g1-test".to_owned()) { + conf.sync_endpoints = vec![unwrap!(EndpointV1::parse_from_raw( + "WS2P 3eaab4c7 ts.gt.librelois.fr 443 /ws2p", + PubKey::Ed25519(unwrap!(ed25519::PublicKey::from_base58( + "CrznBiyq8G4RVUprH9jHmAw1n1iuzw8y9FdJbrESnaX7", + )),), + 0, + 0, + ))]; } - if let Some(sync_endpoints) = module_user_conf.sync_endpoints { - conf.sync_endpoints = sync_endpoints; + + if let Some(module_user_conf) = module_user_conf { + if let Some(outcoming_quota) = module_user_conf.outcoming_quota { + conf.outcoming_quota = outcoming_quota; + } + if let Some(sync_endpoints) = module_user_conf.sync_endpoints { + conf.sync_endpoints = sync_endpoints; + } } Ok(conf) diff --git a/lib/modules/ws2p/ws2p/src/lib.rs b/lib/modules/ws2p/ws2p/src/lib.rs index a9e1eedd..131bc11c 100644 --- a/lib/modules/ws2p/ws2p/src/lib.rs +++ b/lib/modules/ws2p/ws2p/src/lib.rs @@ -159,15 +159,17 @@ impl DursModule<DuRsConf, DursMsg> for WS2Pv2Module { } fn generate_module_conf( _global_conf: &<DuRsConf as DursConfTrait>::GlobalConf, - module_user_conf: Self::ModuleUserConf, + module_user_conf: Option<Self::ModuleUserConf>, ) -> Result<Self::ModuleConf, ModuleConfError> { let mut conf = WS2PConf::default(); - if let Some(outcoming_quota) = module_user_conf.outcoming_quota { - conf.outcoming_quota = outcoming_quota; - } - if let Some(sync_endpoints) = module_user_conf.sync_endpoints { - conf.sync_endpoints = sync_endpoints; + if let Some(module_user_conf) = module_user_conf { + if let Some(outcoming_quota) = module_user_conf.outcoming_quota { + conf.outcoming_quota = outcoming_quota; + } + if let Some(sync_endpoints) = module_user_conf.sync_endpoints { + conf.sync_endpoints = sync_endpoints; + } } Ok(conf) -- GitLab