diff --git a/rust/flexbuffers/Cargo.toml b/rust/flexbuffers/Cargo.toml index 48c12c4a2..ebbbbbca6 100644 --- a/rust/flexbuffers/Cargo.toml +++ b/rust/flexbuffers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "flexbuffers" -version = "0.1.0" +version = "0.1.1" authors = ["Casper Neo ", "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" - diff --git a/rust/flexbuffers/src/builder/ser.rs b/rust/flexbuffers/src/builder/ser.rs index a0180b678..0b9d689ce 100644 --- a/rust/flexbuffers/src/builder/ser.rs +++ b/rust/flexbuffers/src/builder/ser.rs @@ -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.builder.push(v); + self.builder.push(crate::Blob(v)); self.finish_if_not_nested() } fn serialize_none(self) -> Result { diff --git a/tests/rust_usage_test/Cargo.toml b/tests/rust_usage_test/Cargo.toml index 406c7282d..e6a5c1df5 100644 --- a/tests/rust_usage_test/Cargo.toml +++ b/tests/rust_usage_test/Cargo.toml @@ -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" diff --git a/tests/rust_usage_test/tests/flexbuffers_tests/qc_serious.rs b/tests/rust_usage_test/tests/flexbuffers_tests/qc_serious.rs index 3533a4a80..abd1ced7e 100644 --- a/tests/rust_usage_test/tests/flexbuffers_tests/qc_serious.rs +++ b/tests/rust_usage_test/tests/flexbuffers_tests/qc_serious.rs @@ -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, c: Array2, }, + Blobs(#[serde(with = "serde_bytes")] Vec), } // There is some upstream bug in deriving Arbitrary for Enum so we manually implement it here. diff --git a/tests/rust_usage_test/tests/flexbuffers_tests/rwyw.rs b/tests/rust_usage_test/tests/flexbuffers_tests/rwyw.rs index a83223a28..7ae797456 100644 --- a/tests/rust_usage_test/tests/flexbuffers_tests/rwyw.rs +++ b/tests/rust_usage_test/tests/flexbuffers_tests/rwyw.rs @@ -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); + 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();