1- use run_make_support:: { python_command, rustdoc} ;
1+ use run_make_support:: path_helpers:: read_dir_entries_recursive;
2+ use run_make_support:: rfs:: read_to_string;
3+ use run_make_support:: { jzon, rustdoc} ;
24
35fn main ( ) {
46 let out_dir = "out" ;
@@ -8,6 +10,48 @@ fn main() {
810 . arg ( "--generate-redirect-map" )
911 . out_dir ( & out_dir)
1012 . run ( ) ;
11- // FIXME (GuillaumeGomez): Port the python script to Rust as well.
12- python_command ( ) . arg ( "validate_json.py" ) . arg ( & out_dir) . run ( ) ;
13+
14+ let mut found_file = false ;
15+ read_dir_entries_recursive ( & out_dir, |path| {
16+ if !found_file
17+ && path. is_file ( )
18+ && path. file_name ( ) . map ( |name| name == "redirect-map.json" ) . unwrap_or ( false )
19+ {
20+ found_file = true ;
21+ let generated = read_to_string ( path) ;
22+ let expected = read_to_string ( "expected.json" ) ;
23+ let generated = jzon:: parse ( & generated) . expect ( "failed to parse JSON" ) ;
24+ let expected = jzon:: parse ( & expected) . expect ( "failed to parse JSON" ) ;
25+
26+ let mut differences = Vec :: new ( ) ;
27+ for ( key, expected_value) in expected. entries ( ) {
28+ match generated. get ( key) {
29+ Some ( value) => {
30+ if expected_value != value {
31+ differences. push ( format ! ( "values for key `{key}` don't match" ) ) ;
32+ }
33+ }
34+ None => differences. push ( format ! ( "missing key `{key}`" ) ) ,
35+ }
36+ }
37+ for ( key, data) in generated. entries ( ) {
38+ if !expected. has_key ( key) {
39+ differences
40+ . push ( format ! ( "Extra data not expected: key: `{key}`, data: `{data}`" ) ) ;
41+ }
42+ }
43+
44+ if !differences. is_empty ( ) {
45+ eprintln ! ( "Found differences in JSON files:" ) ;
46+ for diff in differences {
47+ eprintln ! ( "=> {diff}" ) ;
48+ }
49+ std:: process:: exit ( 1 ) ;
50+ }
51+ }
52+ } ) ;
53+
54+ if !found_file {
55+ panic ! ( "`redirect-map.json` file was not found" ) ;
56+ }
1357}
0 commit comments