aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/message/signalproxy/mod.rs20
-rw-r--r--src/message/signalproxy/objects/aliasmanager.rs5
-rw-r--r--src/message/signalproxy/objects/mod.rs2
-rw-r--r--src/session/mod.rs45
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!()
+ }
+}