-fn convert_file<'a, 'b>(libast: &'a FullLibraryAST, crate_types: &mut CrateTypes<'a>, in_dir: &str, out_dir: &str, path: &str, orig_crate: &str, module: &str, header_file: &mut File, cpp_header_file: &mut File) {
- let syntax = if let Some(ast) = libast.files.get(module) { ast } else { return };
-
- assert!(syntax.shebang.is_none()); // Not sure what this is, hope we dont have one
-
- let new_file_path = format!("{}/{}", out_dir, path);
- let _ = std::fs::create_dir((&new_file_path.as_ref() as &std::path::Path).parent().unwrap());
- let mut out = std::fs::OpenOptions::new().write(true).create(true).truncate(true)
- .open(new_file_path).expect("Unable to open new src file");
-
- assert_eq!(export_status(&syntax.attrs), ExportStatus::Export);
- writeln_docs(&mut out, &syntax.attrs, "");
-
- if path.ends_with("/lib.rs") {
- // Special-case the top-level lib.rs with various lint allows and a pointer to the c_types
- // and bitcoin hand-written modules.
- writeln!(out, "#![allow(unknown_lints)]").unwrap();
- writeln!(out, "#![allow(non_camel_case_types)]").unwrap();
- writeln!(out, "#![allow(non_snake_case)]").unwrap();
- writeln!(out, "#![allow(unused_imports)]").unwrap();
- writeln!(out, "#![allow(unused_variables)]").unwrap();
- writeln!(out, "#![allow(unused_mut)]").unwrap();
- writeln!(out, "#![allow(unused_parens)]").unwrap();
- writeln!(out, "#![allow(unused_unsafe)]").unwrap();
- writeln!(out, "#![allow(unused_braces)]").unwrap();
- writeln!(out, "mod c_types;").unwrap();
- writeln!(out, "mod bitcoin;").unwrap();
- } else {
- writeln!(out, "\nuse std::ffi::c_void;\nuse bitcoin::hashes::Hash;\nuse crate::c_types::*;\n").unwrap();
- }
-
- for (path, new_mod, m) in file_iter(&syntax, in_dir, path, &module) {
- writeln_docs(&mut out, &m.attrs, "");
- writeln!(out, "pub mod {};", m.ident).unwrap();
- convert_file(libast, crate_types, in_dir, out_dir, &path,
- orig_crate, &new_mod, header_file, cpp_header_file);
- }
+fn convert_file<'a, 'b>(libast: &'a FullLibraryAST, crate_types: &mut CrateTypes<'a>, out_dir: &str, orig_crate: &str, header_file: &mut File, cpp_header_file: &mut File) {
+ for (module, astmod) in libast.modules.iter() {
+ let ASTModule { ref attrs, ref items, ref submods } = astmod;
+ assert_eq!(export_status(&attrs), ExportStatus::Export);
+
+ let new_file_path = if submods.is_empty() {
+ format!("{}/{}.rs", out_dir, module.replace("::", "/"))
+ } else if module != "" {
+ format!("{}/{}/mod.rs", out_dir, module.replace("::", "/"))
+ } else {
+ format!("{}/lib.rs", out_dir)
+ };
+ let _ = std::fs::create_dir((&new_file_path.as_ref() as &std::path::Path).parent().unwrap());
+ let mut out = std::fs::OpenOptions::new().write(true).create(true).truncate(true)
+ .open(new_file_path).expect("Unable to open new src file");
+
+ writeln_docs(&mut out, &attrs, "");
+
+ if module == "" {
+ // Special-case the top-level lib.rs with various lint allows and a pointer to the c_types
+ // and bitcoin hand-written modules.
+ writeln!(out, "#![allow(unknown_lints)]").unwrap();
+ writeln!(out, "#![allow(non_camel_case_types)]").unwrap();
+ writeln!(out, "#![allow(non_snake_case)]").unwrap();
+ writeln!(out, "#![allow(unused_imports)]").unwrap();
+ writeln!(out, "#![allow(unused_variables)]").unwrap();
+ writeln!(out, "#![allow(unused_mut)]").unwrap();
+ writeln!(out, "#![allow(unused_parens)]").unwrap();
+ writeln!(out, "#![allow(unused_unsafe)]").unwrap();
+ writeln!(out, "#![allow(unused_braces)]").unwrap();
+ writeln!(out, "mod c_types;").unwrap();
+ writeln!(out, "mod bitcoin;").unwrap();
+ } else {
+ writeln!(out, "\nuse std::ffi::c_void;\nuse bitcoin::hashes::Hash;\nuse crate::c_types::*;\n").unwrap();
+ }