diff --git a/ubisync-lib/src/messages/mod.rs b/ubisync-lib/src/messages/mod.rs index 9e4f3cc..679f897 100644 --- a/ubisync-lib/src/messages/mod.rs +++ b/ubisync-lib/src/messages/mod.rs @@ -24,7 +24,7 @@ pub enum MessageContent { content: ElementContent, pot: PotId, }, - SetElement { + UpdateElement { id: ElementId, content: ElementContent, }, diff --git a/ubisync-lib/src/types/element.rs b/ubisync-lib/src/types/element.rs index 7fe166d..d0a2147 100644 --- a/ubisync-lib/src/types/element.rs +++ b/ubisync-lib/src/types/element.rs @@ -8,17 +8,19 @@ pub struct Element { pub id: ElementId, pub pot: Option, pub content: ElementContent, + pub update_strategy: ElementUpdateStrategy, pub latest_message: Option, pub local_changes: bool, } impl Element { - pub fn new(id: ElementId, content: ElementContent) -> Self { + pub fn new(id: ElementId, content: ElementContent, update_strategy: ElementUpdateStrategy) -> Self { // A new element with no latest message must have local changes Element { id: id, pot: None, content, + update_strategy, latest_message: None, local_changes: true, } @@ -40,3 +42,10 @@ impl Element { self.local_changes } } + + + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum ElementUpdateStrategy { + Overwrite +} \ No newline at end of file diff --git a/ubisync/src/comm/message_processor.rs b/ubisync/src/comm/message_processor.rs index 6627b0a..960aefc 100644 --- a/ubisync/src/comm/message_processor.rs +++ b/ubisync/src/comm/message_processor.rs @@ -25,7 +25,7 @@ pub fn handle(state: &CommState, peer: &PeerId, message: Message) { ) .expect("State failed"); } - MessageContent::SetElement { id, content } => { + MessageContent::UpdateElement { id, content } => { state .update_element_content(id.to_owned(), content.to_owned(), message.id().to_owned()) .expect("State failed"); diff --git a/ubisync/src/state/mod.rs b/ubisync/src/state/mod.rs index 768f409..b9fef22 100644 --- a/ubisync/src/state/mod.rs +++ b/ubisync/src/state/mod.rs @@ -88,7 +88,7 @@ impl State { .inspect(|_| { //TODO: Get all peers interested in the element, e.g. because they subscribe to the element's pot, a share, etc. self.send_to_peers( - MessageContent::SetElement { + MessageContent::UpdateElement { id: element_id.clone(), content: content.clone(), },