Skip to content

Commit 70471c5

Browse files
committed
better doc comments
1 parent 329bf32 commit 70471c5

File tree

4 files changed

+38
-36
lines changed

4 files changed

+38
-36
lines changed

benches/simple.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
use std::time::Instant;
22

33
use compact_encoding::{
4-
fixed_buffer_from_encoded_size, map_decode, map_encode, sum_encoded_size, CompactEncoding,
5-
EncodingError,
4+
create_buffer, map_decode, map_encode, sum_encoded_size, CompactEncoding, EncodingError,
65
};
76
use criterion::{black_box, criterion_group, criterion_main, Criterion};
87

@@ -24,6 +23,10 @@ fn decode(buffer: &[u8]) -> Result<(), EncodingError> {
2423
Ok(())
2524
}
2625

26+
fn create_buffer(encoded_size: usize) -> Box<[u8]> {
27+
vec![0; encoded_size].into_boxed_slice()
28+
}
29+
2730
fn preencode_generic_simple(c: &mut Criterion) {
2831
c.bench_function("preencode generic simple", |b| {
2932
b.iter(preencode);
@@ -36,7 +39,7 @@ fn create_buffer_generic_simple(c: &mut Criterion) {
3639
let encoded_size = preencode().unwrap();
3740
let start = Instant::now();
3841
for _ in 0..iters {
39-
black_box(fixed_buffer_from_encoded_size(encoded_size));
42+
black_box(create_buffer(encoded_size));
4043
}
4144
start.elapsed()
4245
});
@@ -48,7 +51,7 @@ fn encode_generic_simple(c: &mut Criterion) {
4851
c.bench_function("encode generic simple", |b| {
4952
b.iter_custom(|iters| {
5053
let encoded_size = preencode().unwrap();
51-
let buffer = fixed_buffer_from_encoded_size(encoded_size);
54+
let buffer = create_buffer(encoded_size);
5255
let start = Instant::now();
5356
for _ in 0..iters {
5457
let mut buffer = buffer.clone();

src/error.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ pub enum EncodingErrorKind {
1010
Overflow,
1111
/// Buffer contained invalid data during decoding.
1212
InvalidData,
13-
/// Some external error occurred causing a [`CompactEncoding`] method to fail.
13+
/// Some external error occurred causing a [`crate::CompactEncoding`] method to fail.
1414
External,
1515
}
1616

src/fixedwidth.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
11
//! Allow encoding of unsigned ints in a fixed width way, instead of the default variable width.
22
//!
3-
//! # Why?
4-
//!
5-
//! By default, unsigned integrers are variable width encoded with [`CompactEncoding`].
6-
//! However we sometimes want them fixed width encoded.
7-
//! The [`FixedWidthEncoding`] lets us do this. To fixed width encode an unsigned integrer simply
8-
//! call [`FixedWidthEncoding::as_fixed_width`] on it. Like this:
9-
//!
3+
//! Why? Because the default [`CompactEncoding`] implementation for unsigned integers uses a
4+
//! variable width encoding. However sometimes want them encoded with a fixed width,
5+
//! [`FixedWidthEncoding`] lets us do this. To fixed width encode an unsigned integrer simply call
6+
//! [`FixedWidthEncoding::as_fixed_width`] on it. Like this:
107
//! ```
118
//! # use compact_encoding::EncodingError;
129
//! use compact_encoding::{to_encoded_bytes, FixedWidthEncoding};
1310
//! let buff = to_encoded_bytes!(42u32.as_fixed_width());
14-
//! assert_eq!(buff, vec![42, 0, 0, 0]);
11+
//! assert_eq!(buff, [42, 0, 0, 0].into());
1512
//! // vs variable width
1613
//! let buff = to_encoded_bytes!(42u32);
17-
//! assert_eq!(buff, vec![42]);
14+
//! assert_eq!(buff, [42].into());
1815
//! # Ok::<(), Box<dyn std::error::Error>>(())
1916
//! ```
2017
//!
@@ -138,8 +135,8 @@ mod test {
138135
let x = 42u32;
139136
let fixed_buff = to_encoded_bytes!(x.as_fixed_width());
140137
let var_buff = to_encoded_bytes!(x);
141-
assert_eq!(fixed_buff, vec![42, 0, 0, 0]);
142-
assert_eq!(var_buff, vec![42]);
138+
assert_eq!(fixed_buff, [42_u8, 0, 0, 0].into());
139+
assert_eq!(var_buff, [42_u8].into());
143140

144141
let ((fixed_dec,), rest) = map_decode!(&fixed_buff, [FixedWidthU32]);
145142
assert!(rest.is_empty());
@@ -156,8 +153,8 @@ mod test {
156153
let x = 42u64;
157154
let fixed_buff = to_encoded_bytes!(x.as_fixed_width());
158155
let var_buff = to_encoded_bytes!(x);
159-
assert_eq!(fixed_buff, vec![42, 0, 0, 0, 0, 0, 0, 0]);
160-
assert_eq!(var_buff, vec![42]);
156+
assert_eq!(fixed_buff, [42, 0, 0, 0, 0, 0, 0, 0].into());
157+
assert_eq!(var_buff, [42].into());
161158

162159
let ((fixed_dec,), rest) = map_decode!(&fixed_buff, [FixedWidthU64]);
163160
assert!(rest.is_empty());

src/lib.rs

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44
//! # Series of compact encoding schemes for building small and fast parsers and serializers
55
//!
66
//! Binary compatible with the
7-
//! [original Javascript compact-encoding library](https://github.com/compact-encoding/compact-encoding/).
7+
//! [original JavaScript compact-encoding library](https://github.com/compact-encoding/compact-encoding/).
88
//!
99
//! ## Usage
1010
//!
11-
//! ### Quick start
11+
//! The simplest way to encoded and decode a some data is using the [`to_encoded_bytes`] and
12+
//! [`map_decode`] macros:
1213
//! ```
1314
//! use compact_encoding::{map_decode, to_encoded_bytes};
1415
//!
@@ -23,42 +24,43 @@
2324
//! assert_eq!(word_dec, word);
2425
//! # Ok::<(), Box<dyn std::error::Error>>(())
2526
//! ```
26-
//! ### Manually implement encoding and decoding
27+
//! ### Manual encoding and decoding
2728
//!
28-
//! This example shows how to manually calculate the needed buffer size, create the buffer, encode
29-
//! data, and decode it. Using only the types which include a default [`CompactEncoding`]
30-
//! implementation. A more ergonomic pattern is demonstrated in other examples
29+
//! When more fine-grained control of encoding and decoding is needed you manually do each step of
30+
//! encoding and decoding like in the following example, where we want to use a fixed width
31+
//! encoding for `number` (instead of the default variable width encoding). It shows how to
32+
//! manually calculate the needed buffer size, create the buffer, encode data, and decode it.
3133
//! ```
32-
//! use compact_encoding::CompactEncoding;
34+
//! use compact_encoding::{CompactEncoding, FixedWidthEncoding, FixedWidthU32};
3335
//!
3436
//! let number = 41_u32;
3537
//! let word = "hi";
3638
//!
37-
//! // Use `encoded_size` to figure out how big a buffer should be.
38-
//! let size = number.encoded_size()? + word.encoded_size()?;
39+
//! // Use `encoded_size` to figure out how big a buffer should be
40+
//! let size = number.as_fixed_width().encoded_size()? + word.encoded_size()?;
3941
//!
4042
//! // Create a buffer with the calculated size
4143
//! let mut buffer = vec![0; size];
42-
//! assert_eq!(buffer.len(), 1 + 1 + 2);
44+
//! assert_eq!(buffer.len(), 4 + 1 + 2);
4345
//!
4446
//! // Then actually encode the values
45-
//! let mut remaining_buffer = number.encode(&mut buffer)?;
47+
//! let mut remaining_buffer = number.as_fixed_width().encode(&mut buffer)?;
4648
//! remaining_buffer = word.encode(remaining_buffer)?;
4749
//! assert!(remaining_buffer.is_empty());
48-
//! assert_eq!(buffer.to_vec(), vec![41_u8, 2_u8, b'h', b'i']);
50+
//! assert_eq!(buffer.to_vec(), vec![41_u8, 0, 0, 0, 2_u8, b'h', b'i']);
4951
//!
5052
//! // `buffer` now contains all the encoded data, and we can decode from it
51-
//! let (number_dec, remaining_buffer) = u32::decode(&buffer)?;
53+
//! let (number_dec, remaining_buffer) = FixedWidthU32::decode(&buffer)?;
5254
//! let (word_dec, remaining_buffer) = String::decode(remaining_buffer)?;
5355
//! assert!(remaining_buffer.is_empty());
5456
//! assert_eq!(number_dec, number);
5557
//! assert_eq!(word_dec, word);
5658
//! # Ok::<(), Box<dyn std::error::Error>>(())
5759
//! ```
5860
//!
59-
//! ### Implementing CompactEncoding for new types
61+
//! ### Implementing CompactEncoding for custom types
6062
//!
61-
//! You can implement [`CompactEncoding`]` for your own structs like below:
63+
//! Here we demonstrate how to implement [`CompactEncoding`] for a custom struct.
6264
//! ```
6365
//! use compact_encoding::{
6466
//! map_decode, map_encode, sum_encoded_size, to_encoded_bytes, CompactEncoding, EncodingError,
@@ -346,7 +348,7 @@ macro_rules! create_buffer {
346348
+ $val.encoded_size()?
347349
)*
348350
);
349-
vec![0; len]
351+
vec![0; len].into_boxed_slice()
350352
}}
351353
}
352354

@@ -360,7 +362,7 @@ macro_rules! create_buffer {
360362
/// let mut buff = create_buffer!(num, word);
361363
/// let result = map_encode!(&mut buff, num, word);
362364
/// assert!(result.is_empty());
363-
/// assert_eq!(&buff, &[42, 2, b'y', b'o']);
365+
/// assert_eq!(&*buff, &[42, 2, b'y', b'o']);
364366
/// # Ok::<(), Box<dyn std::error::Error>>(())
365367
/// ```
366368
macro_rules! map_encode {
@@ -384,7 +386,7 @@ macro_rules! map_encode {
384386
/// ```
385387
/// # use crate::compact_encoding::to_encoded_bytes;
386388
/// let result = to_encoded_bytes!(42u64, "yo");
387-
/// assert_eq!(&result, &[42, 2, 121, 111]);
389+
/// assert_eq!(&*result, &[42, 2, 121, 111]);
388390
/// # Ok::<(), Box<dyn std::error::Error>>(())
389391
/// ```
390392
macro_rules! to_encoded_bytes {

0 commit comments

Comments
 (0)