Upgrade rust/crates/protobuf-codegen to 2.18.0

* Revert local change, remove patches/*.diff
* Add echo version in post_update.sh

Bug: 170256643
Test: atest -c --include-subdirs external/rust/crates
Test: atest -c --host --include-subdirs external/crosvm
Change-Id: I701b9b2a36f6e8e2ec0a37f47fe85cbb68f2866b
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
index 528d884..e7b2111 100644
--- a/.cargo_vcs_info.json
+++ b/.cargo_vcs_info.json
@@ -1,5 +1,5 @@
 {
   "git": {
-    "sha1": "5e7854f82d19505a98ca22e0b83b79a0e6e90c2b"
+    "sha1": "dddcb17948d6ad78fe610af5a7f016d871d2a380"
   }
 }
diff --git a/Android.bp b/Android.bp
index b61ed21..2ac2ac1 100644
--- a/Android.bp
+++ b/Android.bp
@@ -37,4 +37,4 @@
 }
 
 // dependent_library ["feature_list"]
-//   protobuf-2.17.0
+//   protobuf-2.18.0
diff --git a/Cargo.lock b/Cargo.lock
index 91974a5..84467c7 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2,13 +2,13 @@
 # It is not intended for manual editing.
 [[package]]
 name = "protobuf"
-version = "2.17.0"
+version = "2.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb14183cc7f213ee2410067e1ceeadba2a7478a59432ff0747a335202798b1e2"
+checksum = "6d147edb77bcccbfc81fabffdc7bd50c13e103b15ca1e27515fe40de69a5776b"
 
 [[package]]
 name = "protobuf-codegen"
-version = "2.17.0"
+version = "2.18.0"
 dependencies = [
  "protobuf",
 ]
diff --git a/Cargo.toml b/Cargo.toml
index 4272db8..09a30b7 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -12,7 +12,7 @@
 
 [package]
 name = "protobuf-codegen"
-version = "2.17.0"
+version = "2.18.0"
 authors = ["Stepan Koltsov <stepan.koltsov@gmail.com>"]
 description = "Code generator for rust-protobuf.\n\nIncludes a library and `protoc-gen-rust` binary.\n\nSee `protoc-rust` and `protobuf-codegen-pure` crates.\n"
 homepage = "https://github.com/stepancheg/rust-protobuf/"
@@ -34,4 +34,4 @@
 path = "src/bin/protobuf-bin-gen-rust-do-not-use.rs"
 test = false
 [dependencies.protobuf]
-version = "=2.17.0"
+version = "=2.18.0"
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index 3c3fe29..01d1087 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -1,6 +1,6 @@
 [package]
 name = "protobuf-codegen"
-version = "2.17.0"
+version = "2.18.0"
 authors = ["Stepan Koltsov <stepan.koltsov@gmail.com>"]
 license = "MIT"
 homepage = "https://github.com/stepancheg/rust-protobuf/"
@@ -17,7 +17,7 @@
 bench = false
 
 [dependencies]
-protobuf = { path = "../protobuf", version = "=2.17.0" }
+protobuf = { path = "../protobuf", version = "=2.18.0" }
 
 [[bin]]
 
diff --git a/METADATA b/METADATA
index 43064d9..b44593d 100644
--- a/METADATA
+++ b/METADATA
@@ -1,5 +1,5 @@
 name: "protobuf-codegen"
-description: "Code generator for rust-protobuf.\n\nIncludes a library and `protoc-gen-rust` binary.\n\nSee `protoc-rust` and `protobuf-codegen-pure` crates.\n"
+description: "Code generator for rust-protobuf.  Includes a library and `protoc-gen-rust` binary.  See `protoc-rust` and `protobuf-codegen-pure` crates."
 third_party {
   url {
     type: HOMEPAGE
@@ -7,13 +7,13 @@
   }
   url {
     type: ARCHIVE
-    value: "https://static.crates.io/crates/protobuf-codegen/protobuf-codegen-2.17.0.crate"
+    value: "https://static.crates.io/crates/protobuf-codegen/protobuf-codegen-2.18.0.crate"
   }
-  version: "2.17.0"
+  version: "2.18.0"
   license_type: NOTICE
   last_upgrade_date {
     year: 2020
-    month: 8
-    day: 12
+    month: 10
+    day: 6
   }
 }
diff --git a/patches/0001-Allow-generated-source-to-be-root-module-src.diff b/patches/0001-Allow-generated-source-to-be-root-module-src.diff
deleted file mode 100644
index a3b6be6..0000000
--- a/patches/0001-Allow-generated-source-to-be-root-module-src.diff
+++ /dev/null
@@ -1,33 +0,0 @@
-From 38f7b959fdedb839ce412b7e3faa067d315fc13a Mon Sep 17 00:00:00 2001
-From: Ivan Lozano <ivanlozano@google.com>
-Date: Wed, 26 Aug 2020 15:19:37 -0400
-Subject: [PATCH] Allow generated source to be root module src.
-
-rustfmt::skip breaks compilation when used as a root module source. We
-don't run rustfmt on generated source anyhow.
-See https://github.com/stepancheg/rust-protobuf/issues/493#issuecomment-652874447
-
-Bug: 143953733
-Test: rust_protobuf can generate library variants.
-Change-Id: I0ea47de25c0ddd65781d6509b09ea648d11c4277
----
- src/code_writer.rs | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/code_writer.rs b/src/code_writer.rs
-index 8b53bc6..855b785 100644
---- a/src/code_writer.rs
-+++ b/src/code_writer.rs
-@@ -58,7 +58,8 @@ impl<'a> CodeWriter<'a> {
-         self.write_line("#![allow(clippy::all)]");
-         self.write_line("");
-         self.write_line("#![allow(unused_attributes)]");
--        self.write_line("#![rustfmt::skip]");
-+        // ANDROID CHANGE: comment out rustfmt::skip to fix compilation error.
-+        //self.write_line("#![rustfmt::skip]");
-         self.write_line("");
-         self.write_line("#![allow(box_pointers)]");
-         self.write_line("#![allow(dead_code)]");
--- 
-2.28.0.297.g1956fa8f8d-goog
-
diff --git a/post_update.sh b/post_update.sh
index 39f2fdd..98c02de 100755
--- a/post_update.sh
+++ b/post_update.sh
@@ -9,6 +9,7 @@
 # replace CARGO_PKG_VERSION with version string from METADATA
 SRCFILE=src/lib.rs
 VERSION=`grep version: METADATA | sed -e 's/^.*version: *//'`
+echo "VERSION=$VERSION"
 OLDSTR='env!("CARGO_PKG_VERSION"));'
 NEWSTR="$VERSION); // ANDROID ported version"
 sed -i -e "s:$OLDSTR:$NEWSTR:" $SRCFILE
diff --git a/src/code_writer.rs b/src/code_writer.rs
index 855b785..8b53bc6 100644
--- a/src/code_writer.rs
+++ b/src/code_writer.rs
@@ -58,8 +58,7 @@
         self.write_line("#![allow(clippy::all)]");
         self.write_line("");
         self.write_line("#![allow(unused_attributes)]");
-        // ANDROID CHANGE: comment out rustfmt::skip to fix compilation error.
-        //self.write_line("#![rustfmt::skip]");
+        self.write_line("#![rustfmt::skip]");
         self.write_line("");
         self.write_line("#![allow(box_pointers)]");
         self.write_line("#![allow(dead_code)]");
diff --git a/src/customize.rs b/src/customize.rs
index c55fb07..f8e73aa 100644
--- a/src/customize.rs
+++ b/src/customize.rs
@@ -22,6 +22,12 @@
     pub serde_derive_cfg: Option<String>,
     /// Enable lite runtime
     pub lite_runtime: Option<bool>,
+    /// Generate `mod.rs` in the output directory.
+    ///
+    /// This option allows inclusion of generated files from cargo output directory.
+    ///
+    /// This option will likely be on by default in rust-protobuf version 3.
+    pub gen_mod_rs: Option<bool>,
     /// Used internally to generate protos bundled in protobuf crate
     /// like `descriptor.proto`
     pub inside_protobuf: Option<bool>,
@@ -68,6 +74,9 @@
         if let Some(v) = that.lite_runtime {
             self.lite_runtime = Some(v);
         }
+        if let Some(v) = that.gen_mod_rs {
+            self.gen_mod_rs = Some(v);
+        }
         if let Some(v) = that.inside_protobuf {
             self.inside_protobuf = Some(v);
         }
@@ -113,6 +122,8 @@
                 r.serde_derive_cfg = Some(v.to_owned());
             } else if n == "lite_runtime" {
                 r.lite_runtime = Some(parse_bool(v)?);
+            } else if n == "gen_mod_rs" {
+                r.gen_mod_rs = Some(parse_bool(v)?);
             } else if n == "inside_protobuf" {
                 r.inside_protobuf = Some(parse_bool(v)?);
             } else {
@@ -134,6 +145,7 @@
     let serde_derive = rustproto::exts::serde_derive.get(source);
     let serde_derive_cfg = rustproto::exts::serde_derive_cfg.get(source);
     let lite_runtime = None;
+    let gen_mod_rs = None;
     let inside_protobuf = None;
     Customize {
         expose_oneof,
@@ -144,6 +156,7 @@
         serde_derive,
         serde_derive_cfg,
         lite_runtime,
+        gen_mod_rs,
         inside_protobuf,
         _future_options: (),
     }
@@ -159,6 +172,7 @@
     let serde_derive = None;
     let serde_derive_cfg = None;
     let lite_runtime = None;
+    let gen_mod_rs = None;
     let inside_protobuf = None;
     Customize {
         expose_oneof,
@@ -169,6 +183,7 @@
         serde_derive,
         serde_derive_cfg,
         lite_runtime,
+        gen_mod_rs,
         inside_protobuf,
         _future_options: (),
     }
@@ -183,6 +198,7 @@
     let serde_derive = rustproto::exts::serde_derive_all.get(source);
     let serde_derive_cfg = rustproto::exts::serde_derive_cfg_all.get(source);
     let lite_runtime = rustproto::exts::lite_runtime_all.get(source);
+    let gen_mod_rs = None;
     let inside_protobuf = None;
     Customize {
         expose_oneof,
@@ -194,6 +210,7 @@
         serde_derive_cfg,
         lite_runtime,
         inside_protobuf,
+        gen_mod_rs,
         _future_options: (),
     }
 }
diff --git a/src/lib.rs b/src/lib.rs
index cff1da2..6c33538 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -61,11 +61,12 @@
 use self::enums::*;
 use self::extensions::*;
 use self::message::*;
-use file::proto_path_to_rust_mod;
 use inside::protobuf_crate_path;
 use scope::FileScope;
 use scope::RootScope;
 
+use crate::file::proto_path_to_rust_mod;
+
 #[doc(hidden)]
 pub use protobuf_name::ProtobufAbsolutePath;
 #[doc(hidden)]
@@ -162,12 +163,17 @@
     );
 }
 
+struct GenFileResult {
+    compiler_plugin_result: compiler_plugin::GenResult,
+    mod_name: String,
+}
+
 fn gen_file(
     file: &FileDescriptorProto,
     _files_map: &HashMap<&str, &FileDescriptorProto>,
     root_scope: &RootScope,
     customize: &Customize,
-) -> Option<compiler_plugin::GenResult> {
+) -> GenFileResult {
     // TODO: use it
     let mut customize = customize.clone();
     // options specified in invocation have precedence over options specified in file
@@ -186,7 +192,7 @@
     {
         let mut w = CodeWriter::new(&mut v);
 
-        w.write_generated_by("rust-protobuf", "2.17.0"); // ANDROID ported version
+        w.write_generated_by("rust-protobuf", "2.18.0"); // ANDROID ported version
         w.write_line(&format!("//! Generated file from `{}`", file.get_name()));
         if customize.inside_protobuf != Some(true) {
             w.write_line("");
@@ -221,10 +227,28 @@
         }
     }
 
-    Some(compiler_plugin::GenResult {
-        name: format!("{}.rs", proto_path_to_rust_mod(file.get_name())),
+    GenFileResult {
+        compiler_plugin_result: compiler_plugin::GenResult {
+            name: format!("{}.rs", proto_path_to_rust_mod(file.get_name())),
+            content: v,
+        },
+        mod_name: proto_path_to_rust_mod(file.get_name()).into_string(),
+    }
+}
+
+fn gen_mod_rs(mods: &[String]) -> compiler_plugin::GenResult {
+    let mut v = Vec::new();
+    let mut w = CodeWriter::new(&mut v);
+    w.comment("@generated");
+    w.write_line("");
+    for m in mods {
+        w.write_line(&format!("pub mod {};", m));
+    }
+    drop(w);
+    compiler_plugin::GenResult {
+        name: "mod.rs".to_owned(),
         content: v,
-    })
+    }
 }
 
 // This function is also used externally by cargo plugin
@@ -246,13 +270,23 @@
 
     let all_file_names: Vec<&str> = file_descriptors.iter().map(|f| f.get_name()).collect();
 
+    let mut mods = Vec::new();
+
     for file_name in files_to_generate {
         let file = files_map.get(&file_name[..]).expect(&format!(
             "file not found in file descriptors: {:?}, files: {:?}",
             file_name, all_file_names
         ));
-        results.extend(gen_file(file, &files_map, &root_scope, customize));
+
+        let gen_file_result = gen_file(file, &files_map, &root_scope, customize);
+        results.push(gen_file_result.compiler_plugin_result);
+        mods.push(gen_file_result.mod_name);
     }
+
+    if customize.gen_mod_rs.unwrap_or(false) {
+        results.push(gen_mod_rs(&mods));
+    }
+
     results
 }