From fb2505b4b10185917460cbac9415454d0dc44668 Mon Sep 17 00:00:00 2001 From: Thomas Heck Date: Sat, 13 Feb 2021 16:06:14 +0100 Subject: [PATCH] add byte buf access method to VersionBox --- crdt-enc/src/utils/version_bytes.rs | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/crdt-enc/src/utils/version_bytes.rs b/crdt-enc/src/utils/version_bytes.rs index 5cec9e2..45ea446 100644 --- a/crdt-enc/src/utils/version_bytes.rs +++ b/crdt-enc/src/utils/version_bytes.rs @@ -1,5 +1,5 @@ +use bytes::Buf; use serde::{Deserialize, Serialize}; -use serde_bytes; use std::{borrow::Cow, convert::TryFrom, fmt, io::IoSlice}; use uuid::Uuid; @@ -70,6 +70,14 @@ impl VersionBytes { pub fn buf(&self) -> VersionBytesBuf<'_> { VersionBytesBuf::new(self.0, &self.1) } + + pub fn from_slice(slice: &[u8]) -> Result { + TryFrom::try_from(slice) + } + + pub fn to_vec(&self) -> Vec { + self.as_version_bytes_ref().to_vec() + } } impl From for Vec { @@ -141,6 +149,22 @@ impl<'a> VersionBytesRef<'a> { pub fn buf(&self) -> VersionBytesBuf<'_> { VersionBytesBuf::new(self.0, &self.1) } + + pub fn from_slice(slice: &'a [u8]) -> Result, ParseError> { + TryFrom::try_from(slice) + } + + pub fn to_vec(&self) -> Vec { + let mut buf = self.buf(); + let mut vec = Vec::with_capacity(buf.remaining()); + while buf.has_remaining() { + let chunk = buf.chunk(); + vec.extend_from_slice(chunk); + let chunk_len = chunk.len(); + buf.advance(chunk_len); + } + vec + } } impl<'a> AsRef<[u8]> for VersionBytesRef<'a> { @@ -204,7 +228,7 @@ impl<'a> VersionBytesBuf<'a> { } } -impl<'a> ::bytes::Buf for VersionBytesBuf<'a> { +impl<'a> Buf for VersionBytesBuf<'a> { fn remaining(&self) -> usize { VERSION_LEN + self.content.len() - self.pos }