aboutsummaryrefslogtreecommitdiff
path: root/src/message/signalproxy/objects/mod.rs
blob: 24c244d2f826a6f3aa2475393ac54c579e5284c3 (plain)
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
mod aliasmanager;
mod buffersyncer;
mod bufferview;
mod coreinfo;
mod highlightrulemanager;
mod identity;
mod ircchannel;
mod ircuser;
mod network;
mod networkinfo;

use std::convert::TryInto;

pub use aliasmanager::*;
pub use buffersyncer::*;
pub use bufferview::*;
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),
    BufferSyncer(BufferSyncer),
    BufferViewConfig(BufferViewConfig),
    BufferViewManager(BufferViewManager),
    Network(network::Network),
    NetworkInfo(NetworkInfo),
    NetworkConfig(NetworkConfig),
    CoreData(CoreData),
    Unknown(VariantList),
}

impl Types {
    pub fn to_network(&self) -> VariantList {
        debug!("converting to network object: {:#?}", self);
        match self {
            Types::AliasManager(val) => val.to_network(),
            Types::BufferSyncer(val) => val.to_network(),
            Types::BufferViewConfig(val) => val.to_network(),
            Types::BufferViewManager(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 fn from_network(class_name: &str, input: &mut VariantList) -> Self {
        debug!(
            "converting {} from network object: {:#?}",
            class_name, input
        );
        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)),
            "BufferSyncer" => Types::BufferSyncer(BufferSyncer::from_network(input)),
            "BufferViewConfig" => Types::BufferViewConfig(BufferViewConfig::from_network(input)),
            "BufferViewManager" => Types::BufferViewManager(BufferViewManager::from_network(input)),
            "CoreData" => Types::CoreData(CoreData::from_network(
                &mut input.remove(0).try_into().unwrap(),
            )),
            _ => Types::Unknown(input.to_owned()),
        }
    }
}