From 08262fc3e943dab8c6faa112dc313c9a245fce03 Mon Sep 17 00:00:00 2001 From: Astro Date: Sat, 12 Dec 2020 01:07:24 +0100 Subject: [PATCH] write_value(): take value_buf for serialization from outside the caller should know the required size of that. --- src/lib.rs | 9 ++++++--- src/test.rs | 16 ++++++++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index ffddbf9..7161408 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -186,9 +186,12 @@ impl Store { /// encode with `postcard`, write at `key` #[cfg(feature = "postcard-values")] - pub fn write_value(&mut self, key: &str, value: &T) -> Result<(), Error> { - let mut buf = [0; 64]; - let data = postcard::to_slice(value, &mut buf) + pub fn write_value(&mut self, key: &str, value: &T, mut value_buf: V) -> Result<(), Error> + where + T: Serialize, + V: AsMut<[u8]>, + { + let data = postcard::to_slice(value, value_buf.as_mut()) .map_err(Error::Encode)?; self.write(key, data) } diff --git a/src/test.rs b/src/test.rs index 2dd8036..d2d07e5 100644 --- a/src/test.rs +++ b/src/test.rs @@ -83,7 +83,7 @@ fn write_read_str_utf8() { #[cfg(feature = "postcard-values")] fn write_read_value_str() { let mut store = make_store(); - store.write_value("foo", &"bar").unwrap(); + store.write_value("foo", &"bar", [0; 4]).unwrap(); assert_eq!(store.read_value("foo"), Ok(Some("bar"))); } @@ -91,7 +91,7 @@ fn write_read_value_str() { #[cfg(feature = "postcard-values")] fn write_read_value_u32() { let mut store = make_store(); - store.write_value("foo", &42005u32).unwrap(); + store.write_value("foo", &42005u32, [0; 4]).unwrap(); assert_eq!(store.read_value("foo"), Ok(Some(42005u32))); } @@ -99,7 +99,7 @@ fn write_read_value_u32() { #[cfg(feature = "postcard-values")] fn write_read_value_i64() { let mut store = make_store(); - store.write_value("foo", &-99999999i64).unwrap(); + store.write_value("foo", &-99999999i64, &mut [0; 8]).unwrap(); assert_eq!(store.read_value("foo"), Ok(Some(-99999999i64))); } @@ -107,7 +107,7 @@ fn write_read_value_i64() { #[cfg(feature = "postcard-values")] fn write_read_value_f32() { let mut store = make_store(); - store.write_value("foo", &3.75e17f32).unwrap(); + store.write_value("foo", &3.75e17f32, &mut [0; 4]).unwrap(); assert_eq!(store.read_value("foo"), Ok(Some(3.75e17f32))); } @@ -115,7 +115,7 @@ fn write_read_value_f32() { #[cfg(feature = "postcard-values")] fn write_read_value_f64() { let mut store = make_store(); - store.write_value("foo", &-1.999e-13f64).unwrap(); + store.write_value("foo", &-1.999e-13f64, [0; 8]).unwrap(); assert_eq!(store.read_value("foo"), Ok(Some(-1.999e-13f64))); } @@ -134,11 +134,11 @@ fn write_many() { #[cfg(feature = "postcard-values")] fn write_value_many() { let mut store = make_store(); - store.write_value("quux", &(false, 3u8, -42i16)).unwrap(); + store.write_value("quux", &(false, 3u8, -42i16), [0; 4]).unwrap(); for i in 0..1000u32 { - store.write_value("bar", &i).unwrap(); + store.write_value("bar", &i, [0; 4]).unwrap(); assert_eq!(store.read_value("bar"), Ok(Some(i))); - store.write_value("foo", &(i % 2 == 0)).unwrap(); + store.write_value("foo", &(i % 2 == 0), [0]).unwrap(); assert_eq!(store.read_value("foo"), Ok(Some(i % 2 == 0))); } assert_eq!(store.read_value("quux"), Ok(Some((false, 3u8, -42i16))));