From e46f9fd94f16a014263a35824e2f98097709a5aa Mon Sep 17 00:00:00 2001 From: Lucien Greathouse Date: Wed, 9 Oct 2019 18:27:52 -0700 Subject: [PATCH] Simplify snapshot code using match_file_name utility --- src/snapshot_middleware/csv.rs | 22 ++++------------------ src/snapshot_middleware/lua.rs | 10 +--------- src/snapshot_middleware/rbxlx.rs | 26 ++++++-------------------- src/snapshot_middleware/rbxm.rs | 26 ++++++-------------------- src/snapshot_middleware/rbxmx.rs | 26 ++++++-------------------- src/snapshot_middleware/txt.rs | 21 ++++----------------- 6 files changed, 27 insertions(+), 104 deletions(-) diff --git a/src/snapshot_middleware/csv.rs b/src/snapshot_middleware/csv.rs index fe3e6753..4aeeb995 100644 --- a/src/snapshot_middleware/csv.rs +++ b/src/snapshot_middleware/csv.rs @@ -10,9 +10,9 @@ use crate::{ }; use super::{ - error::SnapshotError, meta_file::AdjacentMetadata, middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware}, + util::match_file_name, }; pub struct SnapshotCsv; @@ -26,25 +26,11 @@ impl SnapshotMiddleware for SnapshotCsv { return Ok(None); } - let extension = match entry.path().extension() { - Some(x) => x - .to_str() - .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))?, + let instance_name = match match_file_name(entry.path(), ".csv") { + Some(name) => name, None => return Ok(None), }; - if extension != "csv" { - return Ok(None); - } - - let instance_name = entry - .path() - .file_stem() - .expect("Could not extract file stem") - .to_str() - .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))? - .to_string(); - let meta_path = entry .path() .with_file_name(format!("{}.meta.json", instance_name)); @@ -58,7 +44,7 @@ impl SnapshotMiddleware for SnapshotCsv { relevant_paths: vec![entry.path().to_path_buf(), meta_path.clone()], ..Default::default() }, - name: Cow::Owned(instance_name), + name: Cow::Owned(instance_name.to_owned()), class_name: Cow::Borrowed("LocalizationTable"), properties: hashmap! { "Contents".to_owned() => RbxValue::String { diff --git a/src/snapshot_middleware/lua.rs b/src/snapshot_middleware/lua.rs index 8fe810c4..bd3553d6 100644 --- a/src/snapshot_middleware/lua.rs +++ b/src/snapshot_middleware/lua.rs @@ -12,6 +12,7 @@ use super::{ dir::SnapshotDir, meta_file::AdjacentMetadata, middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware}, + util::match_trailing, }; pub struct SnapshotLua; @@ -146,15 +147,6 @@ fn snapshot_init( Ok(None) } -fn match_trailing<'a>(input: &'a str, trailer: &str) -> Option<&'a str> { - if input.ends_with(trailer) { - let end = input.len().saturating_sub(trailer.len()); - Some(&input[..end]) - } else { - None - } -} - #[cfg(test)] mod test { use super::*; diff --git a/src/snapshot_middleware/rbxlx.rs b/src/snapshot_middleware/rbxlx.rs index 663a4aeb..8801dd60 100644 --- a/src/snapshot_middleware/rbxlx.rs +++ b/src/snapshot_middleware/rbxlx.rs @@ -8,8 +8,8 @@ use crate::{ }; use super::{ - error::SnapshotError, middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware}, + util::match_file_name, }; pub struct SnapshotRbxlx; @@ -23,24 +23,10 @@ impl SnapshotMiddleware for SnapshotRbxlx { return Ok(None); } - let file_name = entry - .path() - .file_name() - .unwrap() - .to_str() - .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))?; - - if !file_name.ends_with(".rbxlx") { - return Ok(None); - } - - let instance_name = entry - .path() - .file_stem() - .expect("Could not extract file stem") - .to_str() - .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))? - .to_string(); + let instance_name = match match_file_name(entry.path(), ".rbxlx") { + Some(name) => name, + None => return Ok(None), + }; let options = rbx_xml::DecodeOptions::new() .property_behavior(rbx_xml::DecodePropertyBehavior::ReadUnknown); @@ -51,7 +37,7 @@ impl SnapshotMiddleware for SnapshotRbxlx { let root_id = temp_tree.get_root_id(); let mut snapshot = InstanceSnapshot::from_tree(&temp_tree, root_id); - snapshot.name = Cow::Owned(instance_name); + snapshot.name = Cow::Owned(instance_name.to_owned()); snapshot.metadata.instigating_source = Some(entry.path().to_path_buf().into()); snapshot.metadata.relevant_paths = vec![entry.path().to_path_buf()]; diff --git a/src/snapshot_middleware/rbxm.rs b/src/snapshot_middleware/rbxm.rs index d98230ae..52983ce6 100644 --- a/src/snapshot_middleware/rbxm.rs +++ b/src/snapshot_middleware/rbxm.rs @@ -8,8 +8,8 @@ use crate::{ }; use super::{ - error::SnapshotError, middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware}, + util::match_file_name, }; pub struct SnapshotRbxm; @@ -23,24 +23,10 @@ impl SnapshotMiddleware for SnapshotRbxm { return Ok(None); } - let file_name = entry - .path() - .file_name() - .unwrap() - .to_str() - .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))?; - - if !file_name.ends_with(".rbxm") { - return Ok(None); - } - - let instance_name = entry - .path() - .file_stem() - .expect("Could not extract file stem") - .to_str() - .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))? - .to_string(); + let instance_name = match match_file_name(entry.path(), ".rbxm") { + Some(name) => name, + None => return Ok(None), + }; let mut temp_tree = RbxTree::new(RbxInstanceProperties { name: "DataModel".to_owned(), @@ -57,7 +43,7 @@ impl SnapshotMiddleware for SnapshotRbxm { if children.len() == 1 { let mut snapshot = InstanceSnapshot::from_tree(&temp_tree, children[0]); - snapshot.name = Cow::Owned(instance_name); + snapshot.name = Cow::Owned(instance_name.to_owned()); snapshot.metadata.instigating_source = Some(entry.path().to_path_buf().into()); snapshot.metadata.relevant_paths = vec![entry.path().to_path_buf()]; diff --git a/src/snapshot_middleware/rbxmx.rs b/src/snapshot_middleware/rbxmx.rs index e08354aa..df5279f9 100644 --- a/src/snapshot_middleware/rbxmx.rs +++ b/src/snapshot_middleware/rbxmx.rs @@ -8,8 +8,8 @@ use crate::{ }; use super::{ - error::SnapshotError, middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware}, + util::match_file_name, }; pub struct SnapshotRbxmx; @@ -23,24 +23,10 @@ impl SnapshotMiddleware for SnapshotRbxmx { return Ok(None); } - let file_name = entry - .path() - .file_name() - .unwrap() - .to_str() - .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))?; - - if !file_name.ends_with(".rbxmx") { - return Ok(None); - } - - let instance_name = entry - .path() - .file_stem() - .expect("Could not extract file stem") - .to_str() - .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))? - .to_string(); + let instance_name = match match_file_name(entry.path(), ".rbxmx") { + Some(name) => name, + None => return Ok(None), + }; let options = rbx_xml::DecodeOptions::new() .property_behavior(rbx_xml::DecodePropertyBehavior::ReadUnknown); @@ -53,7 +39,7 @@ impl SnapshotMiddleware for SnapshotRbxmx { if children.len() == 1 { let mut snapshot = InstanceSnapshot::from_tree(&temp_tree, children[0]); - snapshot.name = Cow::Owned(instance_name); + snapshot.name = Cow::Owned(instance_name.to_owned()); snapshot.metadata.instigating_source = Some(entry.path().to_path_buf().into()); snapshot.metadata.relevant_paths = vec![entry.path().to_path_buf()]; diff --git a/src/snapshot_middleware/txt.rs b/src/snapshot_middleware/txt.rs index a939a100..65abb657 100644 --- a/src/snapshot_middleware/txt.rs +++ b/src/snapshot_middleware/txt.rs @@ -12,6 +12,7 @@ use super::{ error::SnapshotError, meta_file::AdjacentMetadata, middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware}, + util::match_file_name, }; pub struct SnapshotTxt; @@ -25,25 +26,11 @@ impl SnapshotMiddleware for SnapshotTxt { return Ok(None); } - let extension = match entry.path().extension() { - Some(x) => x - .to_str() - .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))?, + let instance_name = match match_file_name(entry.path(), ".txt") { + Some(name) => name, None => return Ok(None), }; - if extension != "txt" { - return Ok(None); - } - - let instance_name = entry - .path() - .file_stem() - .expect("Could not extract file stem") - .to_str() - .ok_or_else(|| SnapshotError::file_name_bad_unicode(entry.path()))? - .to_string(); - let contents = entry.contents(imfs)?; let contents_str = str::from_utf8(contents) .map_err(|err| SnapshotError::file_contents_bad_unicode(err, entry.path()))? @@ -66,7 +53,7 @@ impl SnapshotMiddleware for SnapshotTxt { relevant_paths: vec![entry.path().to_path_buf(), meta_path.clone()], ..Default::default() }, - name: Cow::Owned(instance_name), + name: Cow::Owned(instance_name.to_owned()), class_name: Cow::Borrowed("StringValue"), properties, children: Vec::new(),