Snap for 8192738 from 7659780bcb3e26e940d2e566d01cefa69d355abe to tm-frc-extservices-release

Change-Id: Iab2600eac9df11886d3356ab93469f8bb5fbf026
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
index 1eff8ec..d722bd8 100644
--- a/.cargo_vcs_info.json
+++ b/.cargo_vcs_info.json
@@ -1,5 +1,5 @@
 {
   "git": {
-    "sha1": "e9270e59f0c46817899dd61119674396f24c2b3e"
+    "sha1": "65e1a50749938612cfbdb69b57fc4cf249f87149"
   }
 }
diff --git a/Android.bp b/Android.bp
index 2284c8e..3568ea5 100644
--- a/Android.bp
+++ b/Android.bp
@@ -42,6 +42,8 @@
     name: "libserde",
     host_supported: true,
     crate_name: "serde",
+    cargo_env_compat: true,
+    cargo_pkg_version: "1.0.130",
     srcs: ["src/lib.rs"],
     edition: "2015",
     features: [
@@ -58,13 +60,13 @@
         "de_boxed_path",
         "de_rc_dst",
         "integer128",
+        "iterator_try_fold",
         "num_nonzero",
         "num_nonzero_signed",
         "ops_bound",
         "range_inclusive",
         "serde_derive",
         "std_atomic",
-        // "std_atomic64", // not for arm/arm64
         "systemtime_checked_add",
     ],
     proc_macros: ["libserde_derive"],
@@ -72,11 +74,44 @@
         "//apex_available:platform",
         "com.android.virt",
     ],
+    vendor_available: true,
 }
 
-// dependent_library ["feature_list"]
-//   proc-macro2-1.0.26 "default,proc-macro"
-//   quote-1.0.9 "default,proc-macro"
-//   serde_derive-1.0.125 "default"
-//   syn-1.0.71 "clone-impls,default,derive,parsing,printing,proc-macro,quote"
-//   unicode-xid-0.2.1 "default"
+rust_test {
+    name: "serde_test_src_lib",
+    host_supported: true,
+    crate_name: "serde",
+    cargo_env_compat: true,
+    cargo_pkg_version: "1.0.130",
+    srcs: ["src/lib.rs"],
+    test_suites: ["general-tests"],
+    auto_gen_config: true,
+    test_options: {
+        unit_test: true,
+    },
+    edition: "2015",
+    features: [
+        "default",
+        "derive",
+        "serde_derive",
+        "std",
+    ],
+    cfgs: [
+        "core_duration",
+        "core_reverse",
+        "core_try_from",
+        "de_boxed_c_str",
+        "de_boxed_path",
+        "de_rc_dst",
+        "integer128",
+        "iterator_try_fold",
+        "num_nonzero",
+        "num_nonzero_signed",
+        "ops_bound",
+        "range_inclusive",
+        "serde_derive",
+        "std_atomic",
+        "systemtime_checked_add",
+    ],
+    proc_macros: ["libserde_derive"],
+}
diff --git a/Cargo.toml b/Cargo.toml
index a260341..944be6b 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -3,16 +3,15 @@
 # When uploading crates to the registry Cargo will automatically
 # "normalize" Cargo.toml files for maximal compatibility
 # with all versions of Cargo and also rewrite `path` dependencies
-# to registry (e.g., crates.io) dependencies
+# to registry (e.g., crates.io) dependencies.
 #
-# If you believe there's an error in this file please file an
-# issue against the rust-lang/cargo repository. If you're
-# editing this file be aware that the upstream Cargo.toml
-# will likely look very different (and much more reasonable)
+# If you are reading this file be aware that the original Cargo.toml
+# will likely look very different (and much more reasonable).
+# See Cargo.toml.orig for the original contents.
 
 [package]
 name = "serde"
-version = "1.0.125"
+version = "1.0.130"
 authors = ["Erick Tryzelaar <[email protected]>", "David Tolnay <[email protected]>"]
 build = "build.rs"
 include = ["build.rs", "src/**/*.rs", "crates-io.md", "README.md", "LICENSE-APACHE", "LICENSE-MIT"]
@@ -30,7 +29,7 @@
 [package.metadata.playground]
 features = ["derive", "rc"]
 [dependencies.serde_derive]
-version = "=1.0.125"
+version = "=1.0.130"
 optional = true
 [dev-dependencies.serde_derive]
 version = "1.0"
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index 6488d90..7065d99 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -1,6 +1,6 @@
 [package]
 name = "serde"
-version = "1.0.125" # remember to update html_root_url and serde_derive dependency
+version = "1.0.130" # remember to update html_root_url and serde_derive dependency
 authors = ["Erick Tryzelaar <[email protected]>", "David Tolnay <[email protected]>"]
 license = "MIT OR Apache-2.0"
 description = "A generic serialization/deserialization framework"
@@ -14,7 +14,7 @@
 build = "build.rs"
 
 [dependencies]
-serde_derive = { version = "=1.0.125", optional = true, path = "../serde_derive" }
+serde_derive = { version = "=1.0.130", optional = true, path = "../serde_derive" }
 
 [dev-dependencies]
 serde_derive = { version = "1.0", path = "../serde_derive" }
diff --git a/METADATA b/METADATA
index 4072511..a3ba416 100644
--- a/METADATA
+++ b/METADATA
@@ -7,13 +7,13 @@
   }
   url {
     type: ARCHIVE
-    value: "https://static.crates.io/crates/serde/serde-1.0.125.crate"
+    value: "https://static.crates.io/crates/serde/serde-1.0.130.crate"
   }
-  version: "1.0.125"
+  version: "1.0.130"
   license_type: NOTICE
   last_upgrade_date {
     year: 2021
-    month: 4
-    day: 13
+    month: 9
+    day: 22
   }
 }
diff --git a/TEST_MAPPING b/TEST_MAPPING
index b835c6b..da1479a 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -1,53 +1,102 @@
 // Generated by update_crate_tests.py for tests that depend on this crate.
 {
+  "imports": [
+    {
+      "path": "external/rust/crates/base64"
+    },
+    {
+      "path": "external/rust/crates/bitflags"
+    },
+    {
+      "path": "external/rust/crates/bytes"
+    },
+    {
+      "path": "external/rust/crates/either"
+    },
+    {
+      "path": "external/rust/crates/rand_chacha"
+    },
+    {
+      "path": "external/rust/crates/serde-xml-rs"
+    },
+    {
+      "path": "external/rust/crates/serde_cbor"
+    },
+    {
+      "path": "external/rust/crates/slab"
+    },
+    {
+      "path": "external/rust/crates/tinytemplate"
+    },
+    {
+      "path": "external/rust/crates/tinyvec"
+    },
+    {
+      "path": "external/rust/crates/unicode-bidi"
+    },
+    {
+      "path": "external/rust/crates/unicode-xid"
+    },
+    {
+      "path": "external/rust/crates/url"
+    }
+  ],
   "presubmit": [
     {
+      "name": "ZipFuseTest"
+    },
+    {
+      "name": "apkdmverity.test"
+    },
+    {
       "name": "authfs_device_test_src_lib"
     },
     {
-      "name": "either_device_test_src_lib"
+      "name": "keystore2_test"
     },
     {
-      "name": "serde_cbor_device_test_src_lib"
+      "name": "keystore2_test_utils_test"
     },
     {
-      "name": "serde_cbor_device_test_tests_bennofs"
+      "name": "legacykeystore_test"
     },
     {
-      "name": "serde_cbor_device_test_tests_canonical"
+      "name": "microdroid_manager_test"
     },
     {
-      "name": "serde_cbor_device_test_tests_de"
+      "name": "serde_test_src_lib"
     },
     {
-      "name": "serde_cbor_device_test_tests_enum"
+      "name": "virtualizationservice_device_test"
+    }
+  ],
+  "presubmit-rust": [
+    {
+      "name": "ZipFuseTest"
     },
     {
-      "name": "serde_cbor_device_test_tests_ser"
+      "name": "apkdmverity.test"
     },
     {
-      "name": "serde_cbor_device_test_tests_std_types"
+      "name": "authfs_device_test_src_lib"
     },
     {
-      "name": "serde_cbor_device_test_tests_tags"
+      "name": "keystore2_test"
     },
     {
-      "name": "serde_cbor_device_test_tests_value"
+      "name": "keystore2_test_utils_test"
     },
     {
-      "name": "serde_test_device_test_src_lib"
+      "name": "legacykeystore_test"
     },
     {
-      "name": "unicode-bidi_device_test_src_lib"
+      "name": "microdroid_manager_test"
     },
     {
-      "name": "url_device_test_src_lib"
+      "name": "serde_test_src_lib"
     },
     {
-      "name": "url_device_test_tests_data"
-    },
-    {
-      "name": "url_device_test_tests_unit"
+      "name": "virtualizationservice_device_test"
     }
   ]
 }
diff --git a/build.rs b/build.rs
index afda291..52834bf 100644
--- a/build.rs
+++ b/build.rs
@@ -53,16 +53,20 @@
     // 128-bit integers stabilized in Rust 1.26:
     // https://blog.rust-lang.org/2018/05/10/Rust-1.26.html
     //
-    // Disabled on Emscripten targets as Emscripten doesn't
-    // currently support integers larger than 64 bits.
-    if minor >= 26 && !emscripten {
+    // Disabled on Emscripten targets before Rust 1.40 since
+    // Emscripten did not support 128-bit integers until Rust 1.40
+    // (https://github.com/rust-lang/rust/pull/65251)
+    if minor >= 26 && (!emscripten || minor >= 40) {
         println!("cargo:rustc-cfg=integer128");
     }
 
     // Inclusive ranges methods stabilized in Rust 1.27:
     // https://github.com/rust-lang/rust/pull/50758
+    // Also Iterator::try_for_each:
+    // https://blog.rust-lang.org/2018/06/21/Rust-1.27.html#library-stabilizations
     if minor >= 27 {
         println!("cargo:rustc-cfg=range_inclusive");
+        println!("cargo:rustc-cfg=iterator_try_fold");
     }
 
     // Non-zero integers stabilized in Rust 1.28:
diff --git a/cargo2android.json b/cargo2android.json
index 4e40fcb..2a35106 100644
--- a/cargo2android.json
+++ b/cargo2android.json
@@ -3,9 +3,13 @@
     "//apex_available:platform",
     "com.android.virt"
   ],
+  "cfg-blocklist": [
+    "std_atomic64"
+  ],
   "dependencies": true,
   "device": true,
   "features": "default,derive",
-  "patch": "patches/Android.bp.patch",
-  "run": true
+  "run": true,
+  "tests": true,
+  "vendor-available": true
 }
\ No newline at end of file
diff --git a/patches/Android.bp.patch b/patches/Android.bp.patch
deleted file mode 100644
index 071947f..0000000
--- a/patches/Android.bp.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git b/Android.bp a/Android.bp
-index 41d67cc..277296f 100644
---- b/Android.bp
-+++ a/Android.bp
-@@ -64,7 +64,7 @@
-         "range_inclusive",
-         "serde_derive",
-         "std_atomic",
--        "std_atomic64",
-+        // "std_atomic64", // not for arm/arm64
-         "systemtime_checked_add",
-     ],
-     proc_macros: ["libserde_derive"],
diff --git a/src/de/mod.rs b/src/de/mod.rs
index 1ed7b4f..54e2fd6 100644
--- a/src/de/mod.rs
+++ b/src/de/mod.rs
@@ -1007,7 +1007,7 @@
     /// `Deserializer`.
     ///
     /// If the `Visitor` would benefit from taking ownership of `String` data,
-    /// indiciate this to the `Deserializer` by using `deserialize_string`
+    /// indicate this to the `Deserializer` by using `deserialize_string`
     /// instead.
     fn deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error>
     where
@@ -1714,7 +1714,7 @@
     }
 }
 
-impl<'de, 'a, A> SeqAccess<'de> for &'a mut A
+impl<'de, 'a, A: ?Sized> SeqAccess<'de> for &'a mut A
 where
     A: SeqAccess<'de>,
 {
@@ -1867,7 +1867,7 @@
     }
 }
 
-impl<'de, 'a, A> MapAccess<'de> for &'a mut A
+impl<'de, 'a, A: ?Sized> MapAccess<'de> for &'a mut A
 where
     A: MapAccess<'de>,
 {
diff --git a/src/lib.rs b/src/lib.rs
index 5c07ece..aad6851 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -84,7 +84,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 // Serde types in rustdoc of other crates get linked to here.
-#![doc(html_root_url = "https://docs.rs/serde/1.0.125")]
+#![doc(html_root_url = "https://docs.rs/serde/1.0.130")]
 // Support using Serde without the standard library!
 #![cfg_attr(not(feature = "std"), no_std)]
 // Unstable functionality only if the user asks for it. For tracking and
@@ -157,7 +157,7 @@
         pub use std::*;
     }
 
-    pub use self::core::{cmp, iter, mem, num, slice, str};
+    pub use self::core::{cmp, iter, mem, num, ptr, slice, str};
     pub use self::core::{f32, f64};
     pub use self::core::{i16, i32, i64, i8, isize};
     pub use self::core::{u16, u32, u64, u8, usize};
diff --git a/src/private/de.rs b/src/private/de.rs
index 9199816..a387d40 100644
--- a/src/private/de.rs
+++ b/src/private/de.rs
@@ -2832,7 +2832,7 @@
     where
         T: DeserializeSeed<'de>,
     {
-        while let Some(item) = self.iter.next() {
+        for item in &mut self.iter {
             // Items in the vector are nulled out when used by a struct.
             if let Some((ref key, ref content)) = *item {
                 self.pending_content = Some(content);
@@ -2934,7 +2934,7 @@
     where
         T: DeserializeSeed<'de>,
     {
-        while let Some(item) = self.iter.next() {
+        for item in &mut self.iter {
             if let Some((ref key, ref content)) = *item {
                 // Do not take(), instead borrow this entry. The internally tagged
                 // enum does its own buffering so we can't tell whether this entry
diff --git a/src/private/mod.rs b/src/private/mod.rs
index 24ea84b..71e82a8 100644
--- a/src/private/mod.rs
+++ b/src/private/mod.rs
@@ -14,6 +14,7 @@
 pub use lib::fmt::{self, Formatter};
 pub use lib::marker::PhantomData;
 pub use lib::option::Option::{self, None, Some};
+pub use lib::ptr;
 pub use lib::result::Result::{self, Err, Ok};
 
 pub use self::string::from_utf8_lossy;
diff --git a/src/ser/mod.rs b/src/ser/mod.rs
index d686c5a..d5bca09 100644
--- a/src/ser/mod.rs
+++ b/src/ser/mod.rs
@@ -1279,9 +1279,20 @@
     {
         let iter = iter.into_iter();
         let mut serializer = try!(self.serialize_seq(iterator_len_hint(&iter)));
-        for item in iter {
-            try!(serializer.serialize_element(&item));
+
+        #[cfg(iterator_try_fold)]
+        {
+            let mut iter = iter;
+            try!(iter.try_for_each(|item| serializer.serialize_element(&item)));
         }
+
+        #[cfg(not(iterator_try_fold))]
+        {
+            for item in iter {
+                try!(serializer.serialize_element(&item));
+            }
+        }
+
         serializer.end()
     }
 
@@ -1319,9 +1330,20 @@
     {
         let iter = iter.into_iter();
         let mut serializer = try!(self.serialize_map(iterator_len_hint(&iter)));
-        for (key, value) in iter {
-            try!(serializer.serialize_entry(&key, &value));
+
+        #[cfg(iterator_try_fold)]
+        {
+            let mut iter = iter;
+            try!(iter.try_for_each(|(key, value)| serializer.serialize_entry(&key, &value)));
         }
+
+        #[cfg(not(iterator_try_fold))]
+        {
+            for (key, value) in iter {
+                try!(serializer.serialize_entry(&key, &value));
+            }
+        }
+
         serializer.end()
     }