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 }