From afb1754528795995e71051a5978a1e434e132be8 Mon Sep 17 00:00:00 2001
From: David Tolnay <dtolnay@gmail.com>
Date: Sun, 23 Jun 2019 12:05:02 -0700
Subject: [PATCH] Allow integer key in untagged flattened map

---
 serde/src/private/de.rs         |  2 ++
 test_suite/tests/test_macros.rs | 28 ++++++++++++++++++++++++++++
 2 files changed, 30 insertions(+)

diff --git a/serde/src/private/de.rs b/serde/src/private/de.rs
index feb3d4c7..ffa5012d 100644
--- a/serde/src/private/de.rs
+++ b/serde/src/private/de.rs
@@ -1420,6 +1420,7 @@ mod content {
                 Content::ByteBuf(v) => visitor.visit_byte_buf(v),
                 Content::Bytes(v) => visitor.visit_borrowed_bytes(v),
                 Content::U8(v) => visitor.visit_u8(v),
+                Content::U64(v) => visitor.visit_u64(v),
                 _ => Err(self.invalid_type(&visitor)),
             }
         }
@@ -2123,6 +2124,7 @@ mod content {
                 Content::ByteBuf(ref v) => visitor.visit_bytes(v),
                 Content::Bytes(v) => visitor.visit_borrowed_bytes(v),
                 Content::U8(v) => visitor.visit_u8(v),
+                Content::U64(v) => visitor.visit_u64(v),
                 _ => Err(self.invalid_type(&visitor)),
             }
         }
diff --git a/test_suite/tests/test_macros.rs b/test_suite/tests/test_macros.rs
index e474953a..c4eb06f3 100644
--- a/test_suite/tests/test_macros.rs
+++ b/test_suite/tests/test_macros.rs
@@ -1466,6 +1466,34 @@ fn test_internally_tagged_struct_with_flattened_field() {
     );
 }
 
+#[test]
+fn test_untagged_enum_with_flattened_integer_key() {
+    #[derive(Debug, PartialEq, Serialize, Deserialize)]
+    #[serde(untagged)]
+    pub enum Untagged {
+        Variant {
+            #[serde(flatten)]
+            map: BTreeMap<u64, String>,
+        },
+    }
+
+    assert_tokens(
+        &Untagged::Variant {
+            map: {
+                let mut map = BTreeMap::new();
+                map.insert(100, "BTreeMap".to_owned());
+                map
+            },
+        },
+        &[
+            Token::Map { len: None },
+            Token::U64(100),
+            Token::Str("BTreeMap"),
+            Token::MapEnd,
+        ],
+    );
+}
+
 #[test]
 fn test_enum_in_untagged_enum() {
     #[derive(Debug, PartialEq, Serialize, Deserialize)]