v0.4.3: tuple struct serialization bug

This commit is contained in:
Sergey Chernov 2023-12-06 00:39:22 +03:00
parent 814ac8f858
commit ad32bbe26e
3 changed files with 33 additions and 5 deletions

View File

@ -1,6 +1,6 @@
[package]
name = "bipack_ru"
version = "0.4.2"
version = "0.4.3"
edition = "2021"
license = "Apache-2.0"
description = "binary size-effective format used in Divan smart contracts, wasm bindings, network protocols, etc."

View File

@ -3,7 +3,7 @@ use serde::de::value::U32Deserializer;
use serde::Deserialize;
use crate::bipack_source::{BipackError, BipackSource, SliceSource};
use crate::error::{Result};
use crate::error::Result;
pub struct Deserializer<T: BipackSource> {
// This string starts with the input data and characters are truncated off
@ -264,12 +264,12 @@ mod tests {
use std::fmt::Debug;
use serde::{Deserialize, Serialize};
use crate::bipack_source::BipackError;
use crate::bipack_source::BipackError;
use crate::de::from_bytes;
use crate::error::Result;
use crate::ser::{to_buffer, to_bytes};
use crate::tools::to_dump;
use crate::tools::{to_dump};
#[test]
fn test_ints() -> Result<()> {
@ -406,4 +406,32 @@ mod tests {
assert_eq!(6, to_bytes(&z).unwrap().len());
assert_eq!(z, to_bytes(&z).unwrap()[1..]);
}
// This is real life sample bug:
#[derive(Debug,Serialize,Deserialize,Eq, PartialEq)]
pub enum LogLevel {
Debug,
Info,
Warning,
Error,
}
#[derive(Serialize,Deserialize,Debug,PartialEq)]
pub struct LogArgs(
pub LogLevel,
pub String
);
#[test]
fn test_logargs() {
let x = LogArgs(LogLevel::Debug,"hello".to_string());
let packed = to_bytes(&x).unwrap();
// println!("{}", packed.to_dump());
let y: LogArgs = from_bytes(&packed).unwrap();
// println!("{:?}", y);
assert_eq!(LogLevel::Debug, y.0);
assert_eq!("hello", y.1);
assert_eq!(7, packed.len());
}
}

View File

@ -172,7 +172,7 @@ impl<'a, S: BipackSink> ser::Serializer for &'a mut Serializer<S> {
_name: &'static str,
len: usize,
) -> Result<Self::SerializeTupleStruct> {
self.serialize_seq(Some(len))
Ok(self)
}
fn serialize_tuple_variant(