diff options
| -rw-r--r-- | src/message/signalproxy/mod.rs | 20 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/aliasmanager.rs | 5 | ||||
| -rw-r--r-- | src/message/signalproxy/objects/mod.rs | 2 | ||||
| -rw-r--r-- | src/session/mod.rs | 45 |
4 files changed, 57 insertions, 15 deletions
diff --git a/src/message/signalproxy/mod.rs b/src/message/signalproxy/mod.rs index 23694c8..41057ca 100644 --- a/src/message/signalproxy/mod.rs +++ b/src/message/signalproxy/mod.rs @@ -26,7 +26,7 @@ pub use rpccall::*; pub use syncmessage::*; /// SyncProxy sends sync and rpc messages -pub trait SyncProxy: Session { +pub trait SyncProxy { fn sync( &self, class_name: &str, @@ -63,34 +63,34 @@ pub trait Syncable { /// A Stateful Syncable Object #[allow(unused_variables)] -pub trait StatefulSyncable: Syncable { +pub trait StatefulSyncable: Syncable + translation::NetworkMap { /// Client -> Server: Update the whole object with received data - fn update(&mut self, session: impl SyncProxy, params: VariantMap) + fn update(&mut self, session: impl SyncProxy, param: VariantMap) where - Self: Sized + From<VariantMap>, + Self: Sized, { #[cfg(feature = "client")] { - self.sync(session, "update", vec![params.into()]); + self.sync(session, "update", vec![self.to_network_map().into()]); } #[cfg(feature = "server")] { - *self = params.try_into().unwrap(); + *self = Self::from_network_map(&mut param); } } /// Server -> Client: Update the whole object with received data - fn request_update(&mut self, session: impl SyncProxy, params: VariantMap) + fn request_update(&mut self, session: impl SyncProxy, mut param: VariantMap) where - Self: Sized + From<VariantMap>, + Self: Sized, { #[cfg(feature = "client")] { - *self = params.try_into().unwrap(); + *self = Self::from_network_map(&mut param); } #[cfg(feature = "server")] { - self.sync(session, "requestUpdate", vec![params.into()]); + self.sync(session, "requestUpdate", vec![self.to_network_map().into()]); } } } diff --git a/src/message/signalproxy/objects/aliasmanager.rs b/src/message/signalproxy/objects/aliasmanager.rs index 61da289..cb634ba 100644 --- a/src/message/signalproxy/objects/aliasmanager.rs +++ b/src/message/signalproxy/objects/aliasmanager.rs @@ -11,7 +11,6 @@ use crate::primitive::{VariantList, VariantMap}; /// keeps a list of all registered aliases /// syncable #[derive(Clone, Debug, std::cmp::PartialEq, NetworkList, NetworkMap)] -#[network] pub struct AliasManager { #[network(rename = "Aliases", variant = "VariantMap", network)] pub aliases: Vec<Alias>, @@ -115,11 +114,11 @@ mod tests { #[test] fn aliasmanager_to_network() { - assert_eq!(get_src().to_network(), get_dest()) + assert_eq!(get_src().to_network_list(), get_dest()) } #[test] fn aliasmanager_from_network() { - assert_eq!(AliasManager::from_network(&mut get_dest()), get_src()) + assert_eq!(AliasManager::from_network_list(&mut get_dest()), get_src()) } } diff --git a/src/message/signalproxy/objects/mod.rs b/src/message/signalproxy/objects/mod.rs index 124ed10..72737a0 100644 --- a/src/message/signalproxy/objects/mod.rs +++ b/src/message/signalproxy/objects/mod.rs @@ -29,7 +29,7 @@ pub use networkinfo::*; use libquassel_derive::From; use log::debug; -use super::{Network, NetworkList, NetworkMap}; +use super::{Network, NetworkList}; use crate::primitive::VariantList; /// Central Enum containing and identifying all Quassel Protocol Types: diff --git a/src/session/mod.rs b/src/session/mod.rs index 67045c9..7fa5c29 100644 --- a/src/session/mod.rs +++ b/src/session/mod.rs @@ -1,2 +1,45 @@ +use crate::message::{objects::AliasManager, SyncMessage, SyncProxy}; + /// The Session Trait is the main point of entry and implements the basic logic -pub trait Session {} +pub trait Session: SyncProxy { + fn alias_manager(&self) -> AliasManager; + + fn handle_syncmessage(&self, msg: SyncMessage) + where + Self: Sized, + { + match msg.class_name.as_str() { + "AliasManager" => self.alias_manager().handle_syncmessage(self, msg), + _ => (), + } + } +} + +impl<T> Session for &T +where + T: Session, +{ + fn alias_manager(&self) -> AliasManager { + todo!() + } +} + +#[allow(unused_variables)] +impl<T> SyncProxy for &T +where + T: SyncProxy, +{ + fn sync( + &self, + class_name: &str, + object_name: Option<&str>, + function: &str, + params: crate::primitive::VariantList, + ) { + todo!() + } + + fn rpc(&self, function: &str, params: crate::primitive::VariantList) { + todo!() + } +} |
