From 59b2401c2cced334d59b0338b70c93cd014489db Mon Sep 17 00:00:00 2001 From: Lucien Greathouse Date: Wed, 13 Dec 2017 11:55:30 -0800 Subject: [PATCH] Add more detailed error reporting around invalid projects --- CHANGES.md | 3 ++- src/bin.rs | 30 +++++++++++++++++++++++++++--- src/project.rs | 4 ++-- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index f2231f48..d795a015 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,7 +1,8 @@ # Rojo Change Log ## Current Master -* *No changes* +* Improved error reporting when invalid JSON is found in a `rojo.json` project + * These messages are passed on from Serde ## 0.3.0 * Factored out the plugin into a separate repository diff --git a/src/bin.rs b/src/bin.rs index 7b24940b..7242af14 100644 --- a/src/bin.rs +++ b/src/bin.rs @@ -25,7 +25,7 @@ use std::thread; use core::Config; use pathext::canonicalish; -use project::Project; +use project::{Project, ProjectLoadError}; use vfs::Vfs; use vfs_watch::VfsWatcher; @@ -98,8 +98,32 @@ fn main() { println!("Using project from {}", project_path.display()); v }, - Err(_) => { - println!("Using default project..."); + Err(err) => { + match err { + ProjectLoadError::InvalidJson(serde_err) => { + eprintln!( + "Found invalid JSON!\nProject in: {}\nError: {}", + project_path.display(), + serde_err, + ); + + std::process::exit(1); + }, + ProjectLoadError::FailedToOpen | ProjectLoadError::FailedToRead => { + eprintln!("Found project file, but failed to read it!"); + eprintln!( + "Check the permissions of the project file at\n{}", + project_path.display(), + ); + + std::process::exit(1); + }, + _ => { + // Any other error is fine; use the default project. + }, + } + + println!("Found no project file, using default project..."); Project::default() }, }; diff --git a/src/project.rs b/src/project.rs index 6b705fb7..10392c53 100644 --- a/src/project.rs +++ b/src/project.rs @@ -13,7 +13,7 @@ pub enum ProjectLoadError { DidNotExist, FailedToOpen, FailedToRead, - Invalid, + InvalidJson(serde_json::Error), } #[derive(Debug)] @@ -116,7 +116,7 @@ impl Project { match serde_json::from_str(&contents) { Ok(v) => Ok(v), - Err(_) => return Err(ProjectLoadError::Invalid), + Err(e) => return Err(ProjectLoadError::InvalidJson(e)), } }