embed_json.rs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. use std::env;
  2. use std::fs;
  3. use std::io::Write;
  4. use std::path::Path;
  5. fn main() {
  6. let args: Vec<String> = env::args().collect();
  7. if args.len() != 3 {
  8. eprintln!("Usage: {} <input.json> <output.c>", args[0]);
  9. std::process::exit(1);
  10. }
  11. let input_path = &args[1];
  12. let output_path = &args[2];
  13. let data = fs::read_to_string(input_path).expect("Failed to read input file");
  14. // Minify JSON
  15. let minified = match serde_json::from_str::<serde_json::Value>(&data) {
  16. Ok(json) => serde_json::to_string(&json).unwrap_or(data.clone()),
  17. Err(_) => data.clone(),
  18. };
  19. let escaped = minified
  20. .replace('\\', "\\\\")
  21. .replace('"', "\\\"")
  22. .replace('\n', "\\n")
  23. .replace('\r', "");
  24. let header = "#include \"diagnostic_schema_embed.h\"\n\n";
  25. let array_decl = format!(
  26. "const char ZT_DIAGNOSTIC_SCHEMA_JSON[] = \"{}\";\n",
  27. escaped
  28. );
  29. let len_decl = "const unsigned int ZT_DIAGNOSTIC_SCHEMA_JSON_LEN = sizeof(ZT_DIAGNOSTIC_SCHEMA_JSON) - 1;\n";
  30. let mut out = fs::File::create(output_path).expect("Failed to create output file");
  31. out.write_all(header.as_bytes()).unwrap();
  32. out.write_all(array_decl.as_bytes()).unwrap();
  33. out.write_all(len_decl.as_bytes()).unwrap();
  34. }