1
1
use std:: io:: { BufWriter , Write } ;
2
+ use std:: path:: { Path , PathBuf } ;
2
3
3
4
use anyhow:: { bail, Result } ;
4
5
use clap:: Parser ;
@@ -25,7 +26,7 @@ enum ErrorKind {
25
26
26
27
#[ derive( Debug , Serialize ) ]
27
28
struct JsonOutput {
28
- path : String ,
29
+ path : PathBuf ,
29
30
errors : Vec < Error > ,
30
31
}
31
32
@@ -45,6 +46,12 @@ struct Cli {
45
46
fn main ( ) -> Result < ( ) > {
46
47
let Cli { path, verbose, json_output } = Cli :: parse ( ) ;
47
48
49
+ // We convert `-` into `_` for the file name to be sure the JSON path will always be correct.
50
+ let path = Path :: new ( & path) ;
51
+ let filename = path. file_name ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) . replace ( '-' , "_" ) ;
52
+ let parent = path. parent ( ) . unwrap ( ) ;
53
+ let path = parent. join ( & filename) ;
54
+
48
55
let contents = fs:: read_to_string ( & path) ?;
49
56
let krate: Crate = serde_json:: from_str ( & contents) ?;
50
57
assert_eq ! ( krate. format_version, FORMAT_VERSION ) ;
@@ -101,7 +108,7 @@ fn main() -> Result<()> {
101
108
ErrorKind :: Custom ( msg) => eprintln ! ( "{}: {}" , err. id. 0 , msg) ,
102
109
}
103
110
}
104
- bail ! ( "Errors validating json {path}" ) ;
111
+ bail ! ( "Errors validating json {}" , path . display ( ) ) ;
105
112
}
106
113
107
114
Ok ( ( ) )
0 commit comments