Tighten up meta files a bit more

This commit is contained in:
Lucien Greathouse
2019-07-02 15:53:44 -07:00
parent 91023c5239
commit ce09e57315

View File

@@ -111,11 +111,15 @@ pub enum SnapshotError {
path: PathBuf, path: PathBuf,
}, },
InvalidMetadataField { InvalidMetadataModelField {
field_name: String, field_name: String,
path: PathBuf, path: PathBuf,
}, },
MetadataClassNameNonInit {
path: PathBuf,
},
XmlModelDecodeError { XmlModelDecodeError {
#[fail(cause)] #[fail(cause)]
inner: rbx_xml::DecodeError, inner: rbx_xml::DecodeError,
@@ -166,10 +170,14 @@ impl fmt::Display for SnapshotError {
SnapshotError::ExtraMetadataError { inner, path } => { SnapshotError::ExtraMetadataError { inner, path } => {
write!(output, "Malformed init.meta.json: {} in path {}", inner, path.display()) write!(output, "Malformed init.meta.json: {} in path {}", inner, path.display())
}, },
SnapshotError::InvalidMetadataField { field_name, path } => { SnapshotError::InvalidMetadataModelField { field_name, path } => {
writeln!(output, "The field '{}' cannot be specified on .meta.json files attached to models.", field_name)?; writeln!(output, "The field '{}' cannot be specified on .meta.json files attached to models.", field_name)?;
writeln!(output, "Model path: {}", path.display()) writeln!(output, "Model path: {}", path.display())
}, },
SnapshotError::MetadataClassNameNonInit { path } => {
writeln!(output, "The field 'className' cannot be specified on .meta.json files besides init.meta.json")?;
writeln!(output, "Model path: {}", path.display())
},
SnapshotError::XmlModelDecodeError { inner, path } => { SnapshotError::XmlModelDecodeError { inner, path } => {
write!(output, "Malformed rbxmx model: {} in path {}", inner, path.display()) write!(output, "Malformed rbxmx model: {} in path {}", inner, path.display())
}, },
@@ -423,16 +431,26 @@ impl ExtraMetadata {
} }
} }
fn validate_for_non_init(&self, path: &Path) -> Result<(), SnapshotError> {
if self.class_name.is_some() {
return Err(SnapshotError::MetadataClassNameNonInit {
path: path.to_owned(),
});
}
Ok(())
}
fn validate_for_model(&self, path: &Path) -> Result<(), SnapshotError> { fn validate_for_model(&self, path: &Path) -> Result<(), SnapshotError> {
if self.class_name.is_some() { if self.class_name.is_some() {
return Err(SnapshotError::InvalidMetadataField { return Err(SnapshotError::InvalidMetadataModelField {
field_name: "className".to_owned(), field_name: "className".to_owned(),
path: path.to_owned(), path: path.to_owned(),
}); });
} }
if !self.properties.is_empty() { if !self.properties.is_empty() {
return Err(SnapshotError::InvalidMetadataField { return Err(SnapshotError::InvalidMetadataModelField {
field_name: "properties".to_owned(), field_name: "properties".to_owned(),
path: path.to_owned(), path: path.to_owned(),
}); });
@@ -536,6 +554,7 @@ fn snapshot_lua_file<'source>(
}; };
if let Some(meta) = ExtraMetadata::locate(&imfs, &file.path.with_file_name(instance_name))? { if let Some(meta) = ExtraMetadata::locate(&imfs, &file.path.with_file_name(instance_name))? {
meta.validate_for_non_init(&file.path)?;
meta.apply(&mut snapshot)?; meta.apply(&mut snapshot)?;
} }
@@ -582,6 +601,7 @@ fn snapshot_txt_file<'source>(
}; };
if let Some(meta) = ExtraMetadata::locate(&imfs, &file.path)? { if let Some(meta) = ExtraMetadata::locate(&imfs, &file.path)? {
meta.validate_for_non_init(&file.path)?;
meta.apply(&mut snapshot)?; meta.apply(&mut snapshot)?;
} }
@@ -694,6 +714,7 @@ fn snapshot_csv_file<'source>(
}; };
if let Some(meta) = ExtraMetadata::locate(&imfs, &file.path)? { if let Some(meta) = ExtraMetadata::locate(&imfs, &file.path)? {
meta.validate_for_non_init(&file.path)?;
meta.apply(&mut snapshot)?; meta.apply(&mut snapshot)?;
} }