diff --git a/src/snapshot/metadata.rs b/src/snapshot/metadata.rs index 93556cc2..c3272870 100644 --- a/src/snapshot/metadata.rs +++ b/src/snapshot/metadata.rs @@ -1,4 +1,7 @@ -use std::{fmt, path::PathBuf}; +use std::{ + fmt, + path::{Path, PathBuf}, +}; use serde::{Deserialize, Serialize}; @@ -42,14 +45,41 @@ pub struct InstanceMetadata { pub relevant_paths: Vec, } -impl Default for InstanceMetadata { - fn default() -> Self { - InstanceMetadata { +impl InstanceMetadata { + pub fn new() -> Self { + Self { ignore_unknown_instances: false, instigating_source: None, relevant_paths: Vec::new(), } } + + pub fn ignore_unknown_instances(self, ignore_unknown_instances: bool) -> Self { + Self { + ignore_unknown_instances, + ..self + } + } + + pub fn instigating_source(self, instigating_source: impl Into) -> Self { + Self { + instigating_source: Some(instigating_source.into()), + ..self + } + } + + pub fn relevant_paths(self, relevant_paths: Vec) -> Self { + Self { + relevant_paths, + ..self + } + } +} + +impl Default for InstanceMetadata { + fn default() -> Self { + Self::new() + } } #[derive(Clone, PartialEq, Serialize, Deserialize)] @@ -74,3 +104,9 @@ impl From for InstigatingSource { InstigatingSource::Path(path) } } + +impl From<&Path> for InstigatingSource { + fn from(path: &Path) -> Self { + InstigatingSource::Path(path.to_path_buf()) + } +} diff --git a/src/snapshot_middleware/csv.rs b/src/snapshot_middleware/csv.rs index 5838602f..388c68de 100644 --- a/src/snapshot_middleware/csv.rs +++ b/src/snapshot_middleware/csv.rs @@ -47,11 +47,11 @@ impl SnapshotMiddleware for SnapshotCsv { value: table_contents, }, }) - .metadata(InstanceMetadata { - instigating_source: Some(entry.path().to_path_buf().into()), - relevant_paths: vec![entry.path().to_path_buf(), meta_path.clone()], - ..Default::default() - }); + .metadata( + InstanceMetadata::new() + .instigating_source(entry.path()) + .relevant_paths(vec![entry.path().to_path_buf(), meta_path.clone()]), + ); if let Some(meta_entry) = vfs.get(meta_path).with_not_found()? { let meta_contents = meta_entry.contents(vfs)?; diff --git a/src/snapshot_middleware/dir.rs b/src/snapshot_middleware/dir.rs index 9a93affc..bc8cf34a 100644 --- a/src/snapshot_middleware/dir.rs +++ b/src/snapshot_middleware/dir.rs @@ -62,11 +62,11 @@ impl SnapshotMiddleware for SnapshotDir { .name(instance_name) .class_name("Folder") .children(snapshot_children) - .metadata(InstanceMetadata { - instigating_source: Some(entry.path().to_path_buf().into()), - relevant_paths, - ..Default::default() - }); + .metadata( + InstanceMetadata::new() + .instigating_source(entry.path()) + .relevant_paths(relevant_paths), + ); if let Some(meta_entry) = vfs.get(meta_path).with_not_found()? { let meta_contents = meta_entry.contents(vfs)?; diff --git a/src/snapshot_middleware/lua.rs b/src/snapshot_middleware/lua.rs index 0b096018..836911cf 100644 --- a/src/snapshot_middleware/lua.rs +++ b/src/snapshot_middleware/lua.rs @@ -87,11 +87,11 @@ fn snapshot_lua_file(vfs: &Vfs, entry: &VfsEntry) -> SnapshotI value: contents_str, }, }) - .metadata(InstanceMetadata { - instigating_source: Some(entry.path().to_path_buf().into()), - relevant_paths: vec![entry.path().to_path_buf(), meta_path.clone()], - ..Default::default() - }); + .metadata( + InstanceMetadata::new() + .instigating_source(entry.path()) + .relevant_paths(vec![entry.path().to_path_buf(), meta_path.clone()]), + ); if let Some(meta_entry) = vfs.get(meta_path).with_not_found()? { let meta_contents = meta_entry.contents(vfs)?; diff --git a/src/snapshot_middleware/rbxlx.rs b/src/snapshot_middleware/rbxlx.rs index 59753ccf..ede21beb 100644 --- a/src/snapshot_middleware/rbxlx.rs +++ b/src/snapshot_middleware/rbxlx.rs @@ -36,11 +36,11 @@ impl SnapshotMiddleware for SnapshotRbxlx { let snapshot = InstanceSnapshot::from_tree(&temp_tree, root_id) .name(instance_name) - .metadata(InstanceMetadata { - instigating_source: Some(entry.path().to_path_buf().into()), - relevant_paths: vec![entry.path().to_path_buf()], - ..Default::default() - }); + .metadata( + InstanceMetadata::new() + .instigating_source(entry.path()) + .relevant_paths(vec![entry.path().to_path_buf()]), + ); Ok(Some(snapshot)) } diff --git a/src/snapshot_middleware/rbxm.rs b/src/snapshot_middleware/rbxm.rs index 41d120b3..c8442f93 100644 --- a/src/snapshot_middleware/rbxm.rs +++ b/src/snapshot_middleware/rbxm.rs @@ -46,11 +46,11 @@ impl SnapshotMiddleware for SnapshotRbxm { if children.len() == 1 { let snapshot = InstanceSnapshot::from_tree(&temp_tree, children[0]) .name(instance_name) - .metadata(InstanceMetadata { - instigating_source: Some(entry.path().to_path_buf().into()), - relevant_paths: vec![entry.path().to_path_buf()], - ..Default::default() - }); + .metadata( + InstanceMetadata::new() + .instigating_source(entry.path()) + .relevant_paths(vec![entry.path().to_path_buf()]), + ); Ok(Some(snapshot)) } else { diff --git a/src/snapshot_middleware/rbxmx.rs b/src/snapshot_middleware/rbxmx.rs index 5ff41ce0..a30d0665 100644 --- a/src/snapshot_middleware/rbxmx.rs +++ b/src/snapshot_middleware/rbxmx.rs @@ -38,11 +38,11 @@ impl SnapshotMiddleware for SnapshotRbxmx { if children.len() == 1 { let snapshot = InstanceSnapshot::from_tree(&temp_tree, children[0]) .name(instance_name) - .metadata(InstanceMetadata { - instigating_source: Some(entry.path().to_path_buf().into()), - relevant_paths: vec![entry.path().to_path_buf()], - ..Default::default() - }); + .metadata( + InstanceMetadata::new() + .instigating_source(entry.path()) + .relevant_paths(vec![entry.path().to_path_buf()]), + ); Ok(Some(snapshot)) } else { diff --git a/src/snapshot_middleware/txt.rs b/src/snapshot_middleware/txt.rs index 77208168..3075cd3e 100644 --- a/src/snapshot_middleware/txt.rs +++ b/src/snapshot_middleware/txt.rs @@ -52,11 +52,11 @@ impl SnapshotMiddleware for SnapshotTxt { .name(instance_name) .class_name("StringValue") .properties(properties) - .metadata(InstanceMetadata { - instigating_source: Some(entry.path().to_path_buf().into()), - relevant_paths: vec![entry.path().to_path_buf(), meta_path.clone()], - ..Default::default() - }); + .metadata( + InstanceMetadata::new() + .instigating_source(entry.path()) + .relevant_paths(vec![entry.path().to_path_buf(), meta_path.clone()]), + ); if let Some(meta_entry) = vfs.get(meta_path).with_not_found()? { let meta_contents = meta_entry.contents(vfs)?;