use serde::{Deserialize, Serialize}; /// Serialize to MessagePacki, without versionning /// (see garage_util::migrate for functions that manage versionned /// data formats) pub fn nonversioned_encode(val: &T) -> Result, 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(bytes: &[u8]) -> Result where T: for<'de> Deserialize<'de> + ?Sized, { rmp_serde::decode::from_read_ref::<_, T>(bytes) } /// Serialize to JSON, truncating long result pub fn debug_serialize(x: T) -> String { match serde_json::to_string(&x) { Ok(ss) => { if ss.len() > 100 { // TODO this can panic if 100 is not a codepoint boundary, but inside a 2 Bytes // (or more) codepoint ss[..100].to_string() } else { ss } } Err(e) => format!("", e), } }