diff options
author | Alex Auvolat <alex@adnab.me> | 2023-01-03 15:27:36 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2023-01-03 15:27:36 +0100 |
commit | 8d5505514f950dc1ca1249a3385c9913b5b5e8e0 (patch) | |
tree | a74c043fe76deab6cb0919c6f002f0a4e87be19d /src/util/encode.rs | |
parent | 426d8784dac0e39879af52d980887d3692fc907c (diff) | |
download | garage-8d5505514f950dc1ca1249a3385c9913b5b5e8e0.tar.gz garage-8d5505514f950dc1ca1249a3385c9913b5b5e8e0.zip |
Make it explicit when using nonversioned encoding
Diffstat (limited to 'src/util/encode.rs')
-rw-r--r-- | src/util/encode.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/util/encode.rs b/src/util/encode.rs new file mode 100644 index 00000000..724e482a --- /dev/null +++ b/src/util/encode.rs @@ -0,0 +1,26 @@ +use serde::{Deserialize, Serialize}; + +/// Serialize to MessagePacki, without versionning +/// (see garage_util::migrate for functions that manage versionned +/// data formats) +pub fn nonversioned_encode<T>(val: &T) -> Result<Vec<u8>, rmp_serde::encode::Error> +where + T: Serialize + ?Sized, +{ + let mut wr = Vec::with_capacity(128); + let mut se = rmp_serde::Serializer::new(&mut wr) + .with_struct_map() + .with_string_variants(); + val.serialize(&mut se)?; + Ok(wr) +} + +/// Deserialize from MessagePacki, without versionning +/// (see garage_util::migrate for functions that manage versionned +/// data formats) +pub fn nonversioned_decode<T>(bytes: &[u8]) -> Result<T, rmp_serde::decode::Error> +where + T: for<'de> Deserialize<'de> + ?Sized, +{ + rmp_serde::decode::from_read_ref::<_, T>(bytes) +} |