Add error for malformed project files

This commit is contained in:
Lucien Greathouse
2019-10-09 18:15:07 -07:00
parent dfabc07044
commit e5684ad947
2 changed files with 15 additions and 2 deletions

View File

@@ -39,6 +39,16 @@ impl SnapshotError {
path: Some(path.into()),
}
}
pub(crate) fn malformed_project(
inner: serde_json::Error,
path: impl Into<PathBuf>,
) -> SnapshotError {
SnapshotError {
detail: SnapshotErrorDetail::MalformedProject { inner },
path: Some(path.into()),
}
}
}
impl Error for SnapshotError {
@@ -72,6 +82,7 @@ pub enum SnapshotErrorDetail {
FileDidNotExist,
FileNameBadUnicode,
FileContentsBadUnicode { inner: std::str::Utf8Error },
MalformedProject { inner: serde_json::Error },
}
impl SnapshotErrorDetail {
@@ -81,6 +92,7 @@ impl SnapshotErrorDetail {
match self {
IoError { inner } => Some(inner),
FileContentsBadUnicode { inner } => Some(inner),
MalformedProject { inner } => Some(inner),
_ => None,
}
}
@@ -97,6 +109,7 @@ impl fmt::Display for SnapshotErrorDetail {
FileContentsBadUnicode { inner } => {
write!(formatter, "file had malformed unicode: {}", inner)
}
MalformedProject { inner } => write!(formatter, "{}", inner),
}
}
}

View File

@@ -10,6 +10,7 @@ use crate::{
};
use super::{
error::SnapshotError,
middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware},
snapshot_from_imfs,
};
@@ -42,8 +43,7 @@ impl SnapshotMiddleware for SnapshotProject {
}
let project = Project::load_from_slice(entry.contents(imfs)?, entry.path())
// TODO: Turn this into an error object
.expect("Invalid project file");
.map_err(|err| SnapshotError::malformed_project(err, entry.path()))?;
// Snapshotting a project should always return an instance, so this
// unwrap is safe.