From f2dc1d8898acb42d37976cb78ff219786dc7054f Mon Sep 17 00:00:00 2001 From: Lucien Greathouse Date: Thu, 17 Jan 2019 10:57:13 -0800 Subject: [PATCH] Flesh out use of PathMap Entry API --- server/src/rbx_session.rs | 11 +++++++++-- server/src/snapshot_reconciler.rs | 18 ++++++++---------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/server/src/rbx_session.rs b/server/src/rbx_session.rs index 6c0300c3..50036db5 100644 --- a/server/src/rbx_session.rs +++ b/server/src/rbx_session.rs @@ -1,7 +1,7 @@ use std::{ borrow::Cow, collections::HashMap, - path::{Path, PathBuf}, + path::Path, str, sync::{Arc, Mutex}, }; @@ -29,6 +29,12 @@ pub struct MetadataPerPath { pub instance_name: Option, } +// #[derive(Debug, Default, Serialize, Deserialize)] +// pub struct MetadataPerInstance { +// pub source_path: Option, +// pub ignore_unknown_instances: bool, +// } + pub struct RbxSession { tree: RbxTree, @@ -36,7 +42,8 @@ pub struct RbxSession { // path aliasing. metadata_per_path: PathMap, - // TODO: Track map from RbxId to PathBuf to support two-way sync + // TODO: Hold this map, inverted from metadata_per_path + // metadata_per_instance: PathMap, instance_metadata_map: HashMap, message_queue: Arc>, diff --git a/server/src/snapshot_reconciler.rs b/server/src/snapshot_reconciler.rs index 7874b7de..5f482733 100644 --- a/server/src/snapshot_reconciler.rs +++ b/server/src/snapshot_reconciler.rs @@ -63,6 +63,8 @@ pub struct RbxSnapshotInstance<'a> { pub class_name: Cow<'a, str>, pub properties: HashMap, pub children: Vec>, + + // TODO: Replace source_path and metadata with MetadataPerInstance pub source_path: Option, pub metadata: Option, } @@ -96,12 +98,8 @@ pub fn reify_root( let root_id = tree.get_root_id(); if let Some(source_path) = &snapshot.source_path { - // TODO: Use entry API instead? - // metadata_per_path.entry() - metadata_per_path.insert(source_path.clone(), MetadataPerPath { - instance_id: Some(root_id), - instance_name: None, - }); + let path_meta = metadata_per_path.entry(source_path.to_owned()).or_default(); + path_meta.instance_id = Some(root_id); } if let Some(metadata) = &snapshot.metadata { @@ -129,8 +127,8 @@ pub fn reify_subtree( let id = tree.insert_instance(instance, parent_id); if let Some(source_path) = &snapshot.source_path { - // TODO: Entry API - // let metadata = metadata_per_path.entry(source_path.clone(), id); + let path_meta = metadata_per_path.entry(source_path.clone()).or_default(); + path_meta.instance_id = Some(id); } if let Some(metadata) = &snapshot.metadata { @@ -153,8 +151,8 @@ pub fn reconcile_subtree( changes: &mut InstanceChanges, ) { if let Some(source_path) = &snapshot.source_path { - // TODO: use entry API - // metadata_per_path.insert(source_path.clone(), id); + let path_meta = metadata_per_path.entry(source_path.to_owned()).or_default(); + path_meta.instance_id = Some(id); } if let Some(metadata) = &snapshot.metadata {