Skip to content

Commit ed96a38

Browse files
committed
rename and reorder
1 parent a520454 commit ed96a38

2 files changed

Lines changed: 98 additions & 99 deletions

File tree

src/lib.rs

Lines changed: 97 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -413,79 +413,6 @@ macro_rules! map_first {
413413
(mapped, two)
414414
}};
415415
}
416-
417-
/// The number of bytes required to encode this number. Note this is always variable width.
418-
pub fn usize_encoded_size(val: usize) -> usize {
419-
if val < U16_SIGNIFIER.into() {
420-
1
421-
} else if val <= 0xffff {
422-
3
423-
} else if val <= 0xffffffff {
424-
5
425-
} else {
426-
9
427-
}
428-
}
429-
430-
/// The number of bytes required to encode this number.
431-
/// We only need this for u64 because all other uints can be converted to usize reliably.
432-
pub fn encoded_size_var_u64(val: u64) -> usize {
433-
if val < U16_SIGNIFIER.into() {
434-
1
435-
} else if val <= 0xffff {
436-
3
437-
} else if val <= 0xffffffff {
438-
5
439-
} else {
440-
9
441-
}
442-
}
443-
444-
/// Write `uint` to the start of `buffer` and return the remaining part of `buffer`.
445-
pub fn encoded_bytes_var_u64(uint: u64, buffer: &mut [u8]) -> Result<&mut [u8], EncodingError> {
446-
if uint < U16_SIGNIFIER.into() {
447-
encode_u8(uint as u8, buffer)
448-
} else if uint <= 0xffff {
449-
let rest = write_array(&[U16_SIGNIFIER], buffer)?;
450-
encode_u16(uint as u16, rest)
451-
} else if uint <= 0xffffffff {
452-
let rest = write_array(&[U32_SIGNIFIER], buffer)?;
453-
encode_u32(uint as u32, rest)
454-
} else {
455-
let rest = write_array(&[U64_SIGNIFIER], buffer)?;
456-
encode_u64(uint, rest)
457-
}
458-
}
459-
460-
/// Decode a `usize` from `buffer` and return the remaining bytes.
461-
/// This will fail, when we are decoding a `usize` on a usize = u32 machine for data that was originally encoded on a `usize = u64` machine whenever the value is over `u32::MAX`.
462-
pub fn decode_usize(buffer: &[u8]) -> Result<(usize, &[u8]), EncodingError> {
463-
let [first, rest @ ..] = buffer else {
464-
return Err(EncodingError::out_of_bounds(
465-
"Colud not decode usize, empty buffer",
466-
));
467-
};
468-
let first = *first;
469-
if first < U16_SIGNIFIER {
470-
Ok((first.into(), rest))
471-
} else if first == U16_SIGNIFIER {
472-
let (out, rest) = decode_u16(buffer)?;
473-
return Ok((out.into(), rest));
474-
} else if first == U32_SIGNIFIER {
475-
let (out, rest) = decode_u32(buffer)?;
476-
let out: usize = out
477-
.try_into()
478-
.map_err(|_e| EncodingError::overflow("u32 is bigger than usize"))?;
479-
return Ok((out, rest));
480-
} else {
481-
let (out, rest) = decode_u64(buffer)?;
482-
let out: usize = out
483-
.try_into()
484-
.map_err(|_e| EncodingError::overflow("u64 is bigger than usize"))?;
485-
return Ok((out, rest));
486-
}
487-
}
488-
489416
/// Split a slice in two at `mid`. Returns encoding error when `mid` is out of bounds.
490417
pub fn get_slices_checked(buffer: &[u8], mid: usize) -> Result<(&[u8], &[u8]), EncodingError> {
491418
buffer.split_at_checked(mid).ok_or_else(|| {
@@ -563,7 +490,7 @@ pub fn write_slice<'a>(source: &[u8], buffer: &'a mut [u8]) -> Result<&'a mut [u
563490
}
564491

565492
fn encoded_size_str(value: &str) -> Result<usize, EncodingError> {
566-
Ok(usize_encoded_size(value.len()) + value.len())
493+
Ok(encoded_size_usize(value.len()) + value.len())
567494
}
568495

569496
/// Helper to convert a vec to an array, and fail with an encoding error when needed
@@ -577,6 +504,78 @@ pub fn bytes_fixed_from_vec<const N: usize>(value: &[u8]) -> Result<[u8; N], Enc
577504
})
578505
}
579506

507+
/// The number of bytes required to encode this number. Note this is always variable width.
508+
pub fn encoded_size_usize(val: usize) -> usize {
509+
if val < U16_SIGNIFIER.into() {
510+
1
511+
} else if val <= 0xffff {
512+
3
513+
} else if val <= 0xffffffff {
514+
5
515+
} else {
516+
9
517+
}
518+
}
519+
520+
/// The number of bytes required to encode this number.
521+
/// We only need this for u64 because all other uints can be converted to usize reliably.
522+
pub fn encoded_size_var_u64(val: u64) -> usize {
523+
if val < U16_SIGNIFIER.into() {
524+
1
525+
} else if val <= 0xffff {
526+
3
527+
} else if val <= 0xffffffff {
528+
5
529+
} else {
530+
9
531+
}
532+
}
533+
534+
/// Write `uint` to the start of `buffer` and return the remaining part of `buffer`.
535+
pub fn encoded_bytes_var_u64(uint: u64, buffer: &mut [u8]) -> Result<&mut [u8], EncodingError> {
536+
if uint < U16_SIGNIFIER.into() {
537+
encode_u8(uint as u8, buffer)
538+
} else if uint <= 0xffff {
539+
let rest = write_array(&[U16_SIGNIFIER], buffer)?;
540+
encode_u16(uint as u16, rest)
541+
} else if uint <= 0xffffffff {
542+
let rest = write_array(&[U32_SIGNIFIER], buffer)?;
543+
encode_u32(uint as u32, rest)
544+
} else {
545+
let rest = write_array(&[U64_SIGNIFIER], buffer)?;
546+
encode_u64(uint, rest)
547+
}
548+
}
549+
550+
/// Decode a `usize` from `buffer` and return the remaining bytes.
551+
/// This will fail, when we are decoding a `usize` on a usize = u32 machine for data that was originally encoded on a `usize = u64` machine whenever the value is over `u32::MAX`.
552+
pub fn decode_usize(buffer: &[u8]) -> Result<(usize, &[u8]), EncodingError> {
553+
let [first, rest @ ..] = buffer else {
554+
return Err(EncodingError::out_of_bounds(
555+
"Colud not decode usize, empty buffer",
556+
));
557+
};
558+
let first = *first;
559+
if first < U16_SIGNIFIER {
560+
Ok((first.into(), rest))
561+
} else if first == U16_SIGNIFIER {
562+
let (out, rest) = decode_u16(buffer)?;
563+
return Ok((out.into(), rest));
564+
} else if first == U32_SIGNIFIER {
565+
let (out, rest) = decode_u32(buffer)?;
566+
let out: usize = out
567+
.try_into()
568+
.map_err(|_e| EncodingError::overflow("u32 is bigger than usize"))?;
569+
return Ok((out, rest));
570+
} else {
571+
let (out, rest) = decode_u64(buffer)?;
572+
let out: usize = out
573+
.try_into()
574+
.map_err(|_e| EncodingError::overflow("u64 is bigger than usize"))?;
575+
return Ok((out, rest));
576+
}
577+
}
578+
580579
/// Encoded a fixed sized array to a buffer
581580
pub fn encode_bytes_fixed<'a, const N: usize>(
582581
value: &[u8; N],
@@ -593,23 +592,6 @@ pub fn decode_bytes_fixed<const N: usize>(
593592
//write_array(value, buffer)
594593
}
595594

596-
impl<const N: usize> CompactEncoding for [u8; N] {
597-
fn encoded_size(&self) -> Result<usize, EncodingError> {
598-
Ok(N)
599-
}
600-
601-
fn encode<'a>(&self, buffer: &'a mut [u8]) -> Result<&'a mut [u8], EncodingError> {
602-
write_array(self, buffer)
603-
}
604-
605-
fn decode(buffer: &[u8]) -> Result<(Self, &[u8]), EncodingError>
606-
where
607-
Self: Sized,
608-
{
609-
take_array(buffer)
610-
}
611-
}
612-
613595
fn decode_u16(buffer: &[u8]) -> Result<(u16, &[u8]), EncodingError> {
614596
let (data, rest) = take_array::<2>(buffer)?;
615597
Ok((u16::from_le_bytes(data), rest))
@@ -725,6 +707,23 @@ fn encode_buffer<'a>(value: &[u8], buffer: &'a mut [u8]) -> Result<&'a mut [u8],
725707
write_slice(value, rest)
726708
}
727709

710+
impl<const N: usize> CompactEncoding for [u8; N] {
711+
fn encoded_size(&self) -> Result<usize, EncodingError> {
712+
Ok(N)
713+
}
714+
715+
fn encode<'a>(&self, buffer: &'a mut [u8]) -> Result<&'a mut [u8], EncodingError> {
716+
write_array(self, buffer)
717+
}
718+
719+
fn decode(buffer: &[u8]) -> Result<(Self, &[u8]), EncodingError>
720+
where
721+
Self: Sized,
722+
{
723+
take_array(buffer)
724+
}
725+
}
726+
728727
impl CompactEncoding for u8 {
729728
fn encoded_size(&self) -> Result<usize, EncodingError> {
730729
Ok(1)
@@ -763,7 +762,7 @@ impl CompactEncoding for u16 {
763762
// NB: we want u32 encoded and decoded as variable sized uint
764763
impl CompactEncoding for u32 {
765764
fn encoded_size(&self) -> Result<usize, EncodingError> {
766-
Ok(usize_encoded_size(*self as usize))
765+
Ok(encoded_size_usize(*self as usize))
767766
}
768767

769768
fn encode<'a>(&self, buffer: &'a mut [u8]) -> Result<&'a mut [u8], EncodingError> {
@@ -827,7 +826,7 @@ impl CompactEncoding<String> for str {
827826

828827
impl CompactEncoding for Vec<String> {
829828
fn encoded_size(&self) -> Result<usize, EncodingError> {
830-
let mut out = usize_encoded_size(self.len());
829+
let mut out = encoded_size_usize(self.len());
831830
for s in self {
832831
out += s.encoded_size()?;
833832
}
@@ -859,7 +858,7 @@ impl CompactEncoding for Vec<String> {
859858

860859
impl CompactEncoding for Vec<u8> {
861860
fn encoded_size(&self) -> Result<usize, EncodingError> {
862-
Ok(usize_encoded_size(self.len()) + self.len())
861+
Ok(encoded_size_usize(self.len()) + self.len())
863862
}
864863

865864
fn encode<'a>(&self, buffer: &'a mut [u8]) -> Result<&'a mut [u8], EncodingError> {
@@ -977,7 +976,7 @@ impl VecEncodable for u32 {
977976
where
978977
Self: Sized,
979978
{
980-
Ok(usize_encoded_size(vec.len()) + (vec.len() * 4))
979+
Ok(encoded_size_usize(vec.len()) + (vec.len() * 4))
981980
}
982981
/// Encode `vec` to `buffer`
983982
fn vec_encode<'a>(vec: &[Self], buffer: &'a mut [u8]) -> Result<&'a mut [u8], EncodingError>
@@ -1013,7 +1012,7 @@ impl<const N: usize> VecEncodable for [u8; N] {
10131012
where
10141013
Self: Sized,
10151014
{
1016-
Ok(usize_encoded_size(vec.len()) + (vec.len() * N))
1015+
Ok(encoded_size_usize(vec.len()) + (vec.len() * N))
10171016
}
10181017
}
10191018

@@ -1022,7 +1021,7 @@ impl BoxArrayEncodable for u8 {
10221021
where
10231022
Self: Sized,
10241023
{
1025-
Ok(usize_encoded_size(boxed.len()) + boxed.len())
1024+
Ok(encoded_size_usize(boxed.len()) + boxed.len())
10261025
}
10271026

10281027
fn box_encode<'a>(
@@ -1077,7 +1076,7 @@ mod test {
10771076
}
10781077
macro_rules! check_usize_var_enc_dec {
10791078
($size:expr, $value:expr) => {
1080-
let mut buffer = vec![0; usize_encoded_size($value)];
1079+
let mut buffer = vec![0; encoded_size_usize($value)];
10811080
assert_eq!(buffer.len(), $size);
10821081
let remaining = encode_usize_var(&$value, &mut buffer)?;
10831082
assert!(remaining.is_empty());

tests/encodable.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use compact_encoding::{
2-
create_buffer, map_decode, map_encode, types::EncodingError, CompactEncoding,
2+
create_buffer, error::EncodingError, map_decode, map_encode, CompactEncoding,
33
};
44

55
// The max value for 1 byte length is 252

0 commit comments

Comments
 (0)