summaryrefslogtreecommitdiffstats
path: root/src/contact.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/contact.rs41
1 files changed, 35 insertions, 6 deletions
diff --git a/src/contact.rs b/src/contact.rs
index e9ab21f..9adec16 100644
--- a/src/contact.rs
+++ b/src/contact.rs
@@ -3,23 +3,52 @@ use std::ops::{Deref, DerefMut};
use filamento::{roster::Contact, user::User};
use reactive_stores::Store;
-use crate::user::MacawUser;
+use crate::user::{ArcMacawUser, MacawUser};
-#[derive(Clone)]
+#[derive(Clone, Copy)]
pub struct MacawContact {
pub contact: Store<Contact>,
pub user: MacawUser,
}
-impl MacawContact {
+impl Deref for MacawContact {
+ type Target = Store<Contact>;
+
+ fn deref(&self) -> &Self::Target {
+ &self.contact
+ }
+}
+
+impl DerefMut for MacawContact {
+ fn deref_mut(&mut self) -> &mut Self::Target {
+ &mut self.contact
+ }
+}
+
+impl From<ArcMacawContact> for MacawContact {
+ fn from(value: ArcMacawContact) -> Self {
+ Self {
+ contact: value.contact,
+ user: value.user.into(),
+ }
+ }
+}
+
+#[derive(Clone)]
+pub struct ArcMacawContact {
+ pub contact: Store<Contact>,
+ pub user: ArcMacawUser,
+}
+
+impl ArcMacawContact {
pub fn got_contact_and_user(contact: Contact, user: User) -> Self {
let contact = Store::new(contact);
- let user = MacawUser::got_user(user);
+ let user = ArcMacawUser::got_user(user);
Self { contact, user }
}
}
-impl Deref for MacawContact {
+impl Deref for ArcMacawContact {
type Target = Store<Contact>;
fn deref(&self) -> &Self::Target {
@@ -27,7 +56,7 @@ impl Deref for MacawContact {
}
}
-impl DerefMut for MacawContact {
+impl DerefMut for ArcMacawContact {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.contact
}