Handle non-utf8 input file with better error
diff --git a/gen/src/mod.rs b/gen/src/mod.rs
index c52d273..f4d643d 100644
--- a/gen/src/mod.rs
+++ b/gen/src/mod.rs
@@ -69,9 +69,9 @@
}
pub(super) fn generate_from_path(path: &Path, opt: &Opt) -> GeneratedCode {
- let source = match fs::read_to_string(path) {
+ let source = match read_to_string(path) {
Ok(source) => source,
- Err(err) => format_err(path, "", Error::Fs(err)),
+ Err(err) => format_err(path, "", err),
};
match generate_from_string(&source, opt) {
Ok(out) => out,
@@ -79,6 +79,14 @@
}
}
+fn read_to_string(path: &Path) -> Result<String> {
+ let bytes = fs::read(path)?;
+ match String::from_utf8(bytes) {
+ Ok(string) => Ok(string),
+ Err(err) => Err(Error::Utf8(path.to_owned(), err.utf8_error())),
+ }
+}
+
fn generate_from_string(source: &str, opt: &Opt) -> Result<GeneratedCode> {
let mut source = source;
if source.starts_with("#!") && !source.starts_with("#![") {