Serde with bytes maps to Blob (#6009)
authorCasper <casperneo@uchicago.edu>
Mon, 29 Jun 2020 02:58:08 +0000 (19:58 -0700)
committerGitHub <noreply@github.com>
Mon, 29 Jun 2020 02:58:08 +0000 (19:58 -0700)
* Serde with_bytes maps to Blob

* Bump rust flexbuffers minor version number

Co-authored-by: Casper Neo <cneo@google.com>
rust/flexbuffers/Cargo.toml
rust/flexbuffers/src/builder/ser.rs
tests/rust_usage_test/Cargo.toml
tests/rust_usage_test/tests/flexbuffers_tests/qc_serious.rs
tests/rust_usage_test/tests/flexbuffers_tests/rwyw.rs

index 48c12c4..ebbbbbc 100644 (file)
@@ -1,6 +1,6 @@
 [package]
 name = "flexbuffers"
-version = "0.1.0"
+version = "0.1.1"
 authors = ["Casper Neo <cneo@google.com>", "FlatBuffers Maintainers"]
 edition = "2018"
 license = "Apache-2.0"
@@ -16,4 +16,3 @@ serde_derive = "1.0"
 byteorder = "1.3.2"
 num_enum = "0.5.0"
 bitflags = "1.2.1"
-
index a0180b6..0b9d689 100644 (file)
@@ -270,7 +270,7 @@ impl<'a> ser::Serializer for &'a mut FlexbufferSerializer {
         self.finish_if_not_nested()
     }
     fn serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error> {
-        self.builder.push(v);
+        self.builder.push(crate::Blob(v));
         self.finish_if_not_nested()
     }
     fn serialize_none(self) -> Result<Self::Ok, Self::Error> {
index 406c728..e6a5c1d 100644 (file)
@@ -8,6 +8,7 @@ flatbuffers = { path = "../../rust/flatbuffers" }
 flexbuffers = { path = "../../rust/flexbuffers" }
 serde_derive = "1.0"
 serde = "1.0"
+serde_bytes = "0.11"
 
 [[bin]]
 name = "monster_example"
index 3533a4a..abd1ced 100644 (file)
@@ -1,5 +1,3 @@
-#![allow(unused_imports)]
-
 use super::rwyw::NonNullString;
 use flexbuffers::*;
 use quickcheck::{Arbitrary, Gen};
@@ -30,6 +28,7 @@ enum Enum {
         b: Array4<i32>,
         c: Array2<f64>,
     },
+    Blobs(#[serde(with = "serde_bytes")] Vec<u8>),
 }
 
 // There is some upstream bug in deriving Arbitrary for Enum so we manually implement it here.
index a83223a..7ae7974 100644 (file)
@@ -432,7 +432,16 @@ fn serde_serious() {
     let read = MyTupleStruct::deserialize(reader).unwrap();
     assert_eq!(data, read);
 }
-
+#[test]
+fn serialize_serde_with_bytes_as_blob() {
+    #[derive(Serialize, Deserialize)]
+    struct Foo(#[serde(with = "serde_bytes")] Vec<u8>);
+    let mut s = FlexbufferSerializer::new();
+    Foo(vec![5, 6, 7, 8]).serialize(&mut s).unwrap();
+    let reader = Reader::get_root(s.view()).unwrap();
+    assert_eq!(reader.flexbuffer_type(), FlexBufferType::Blob);
+    assert_eq!(reader.as_blob(), Blob(&[5, 6, 7, 8]));
+}
 #[test]
 fn iter() {
     let mut fxb = Builder::default();