diff options
Diffstat (limited to 'src/message/signalproxy/objects/mod.rs')
| -rw-r--r-- | src/message/signalproxy/objects/mod.rs | 59 |
1 files changed, 53 insertions, 6 deletions
diff --git a/src/message/signalproxy/objects/mod.rs b/src/message/signalproxy/objects/mod.rs index 84f2f5a..2fc4745 100644 --- a/src/message/signalproxy/objects/mod.rs +++ b/src/message/signalproxy/objects/mod.rs @@ -1,15 +1,62 @@ mod aliasmanager; mod buffersyncer; +mod coreinfo; +mod highlightrulemanager; mod identity; -// mod ircchannel; -// mod ircuser; -// mod network; -// mod networkinfo; +mod ircchannel; +mod ircuser; +mod network; +mod networkinfo; + +use std::convert::TryInto; pub use aliasmanager::*; pub use buffersyncer::*; +pub use coreinfo::*; +pub use highlightrulemanager::*; pub use identity::*; +pub use ircchannel::*; +pub use ircuser::*; +pub use network::*; +pub use networkinfo::*; + +use libquassel_derive::From; + +use super::Network; +use crate::primitive::VariantList; + +#[derive(Debug, Clone, PartialEq, From)] +pub enum Types { + AliasManager(AliasManager), + Network(network::Network), + NetworkInfo(NetworkInfo), + NetworkConfig(NetworkConfig), + CoreData(CoreData), + Unknown(VariantList), +} + +impl Types { + pub fn to_network(&self) -> VariantList { + match self { + Types::AliasManager(val) => val.to_network(), + Types::Network(val) => val.to_network(), + Types::NetworkInfo(val) => val.to_network(), + Types::NetworkConfig(val) => val.to_network(), + Types::CoreData(val) => vec![val.to_network().into()], + Types::Unknown(val) => val.clone(), + } + } -pub trait Act { - fn act(self: Self); + pub fn from_network(class_name: &str, input: &mut VariantList) -> Self { + match class_name { + "Network" => Types::Network(Network::from_network(input)), + "NetworkInfo" => Types::NetworkInfo(NetworkInfo::from_network(input)), + "NetworkConfig" => Types::NetworkConfig(NetworkConfig::from_network(input)), + "AliasManager" => Types::AliasManager(AliasManager::from_network(input)), + "CoreData" => Types::CoreData(CoreData::from_network( + &mut input.remove(0).try_into().unwrap(), + )), + _ => Types::Unknown(input.to_owned()), + } + } } |
