@@ -20,9 +20,10 @@ use std::hash::Hasher;
2020
2121use crate :: codec:: SketchBytes ;
2222use crate :: codec:: SketchSlice ;
23+ use crate :: codec:: assert:: ensure_preamble_longs_in;
24+ use crate :: codec:: assert:: ensure_serial_version_is;
25+ use crate :: codec:: assert:: insufficient_data;
2326use crate :: codec:: family:: Family ;
24- use crate :: codec:: utility:: ensure_preamble_longs_in;
25- use crate :: codec:: utility:: ensure_serial_version_is;
2627use crate :: countmin:: CountMinValue ;
2728use crate :: countmin:: UnsignedCountMinValue ;
2829use crate :: countmin:: serialization:: FLAGS_IS_EMPTY ;
@@ -61,7 +62,7 @@ impl<T: CountMinValue> CountMinSketch<T> {
6162 ///
6263 /// # Examples
6364 ///
64- /// ```rust
65+ /// ```
6566 /// # use datasketches::countmin::CountMinSketch;
6667 /// let sketch = CountMinSketch::<i64>::new(4, 128);
6768 /// assert_eq!(sketch.num_buckets(), 128);
@@ -82,7 +83,7 @@ impl<T: CountMinValue> CountMinSketch<T> {
8283 ///
8384 /// # Examples
8485 ///
85- /// ```rust
86+ /// ```
8687 /// # use datasketches::countmin::CountMinSketch;
8788 /// let sketch = CountMinSketch::<i64>::with_seed(4, 64, 42);
8889 /// assert_eq!(sketch.seed(), 42);
@@ -153,7 +154,7 @@ impl<T: CountMinValue> CountMinSketch<T> {
153154 ///
154155 /// # Examples
155156 ///
156- /// ```rust
157+ /// ```
157158 /// # use datasketches::countmin::CountMinSketch;
158159 /// let mut sketch = CountMinSketch::<i64>::new(4, 128);
159160 /// sketch.update("apple");
@@ -167,7 +168,7 @@ impl<T: CountMinValue> CountMinSketch<T> {
167168 ///
168169 /// # Examples
169170 ///
170- /// ```rust
171+ /// ```
171172 /// # use datasketches::countmin::CountMinSketch;
172173 /// let mut sketch = CountMinSketch::<i64>::new(4, 128);
173174 /// sketch.update_with_weight("banana", 3);
@@ -191,7 +192,7 @@ impl<T: CountMinValue> CountMinSketch<T> {
191192 ///
192193 /// # Examples
193194 ///
194- /// ```rust
195+ /// ```
195196 /// # use datasketches::countmin::CountMinSketch;
196197 /// let mut sketch = CountMinSketch::<i64>::new(4, 128);
197198 /// sketch.update_with_weight("pear", 2);
@@ -231,7 +232,7 @@ impl<T: CountMinValue> CountMinSketch<T> {
231232 ///
232233 /// # Examples
233234 ///
234- /// ```rust
235+ /// ```
235236 /// # use datasketches::countmin::CountMinSketch;
236237 /// let mut left = CountMinSketch::<i64>::new(4, 128);
237238 /// let mut right = CountMinSketch::<i64>::new(4, 128);
@@ -261,7 +262,7 @@ impl<T: CountMinValue> CountMinSketch<T> {
261262 ///
262263 /// # Examples
263264 ///
264- /// ```rust
265+ /// ```
265266 /// # use datasketches::countmin::CountMinSketch;
266267 /// # let mut sketch = CountMinSketch::<i64>::new(4, 128);
267268 /// # sketch.update("apple");
@@ -306,7 +307,7 @@ impl<T: CountMinValue> CountMinSketch<T> {
306307 ///
307308 /// # Examples
308309 ///
309- /// ```rust
310+ /// ```
310311 /// # use datasketches::countmin::CountMinSketch;
311312 /// # let mut sketch = CountMinSketch::<i64>::new(4, 64);
312313 /// # sketch.update("apple");
@@ -322,7 +323,7 @@ impl<T: CountMinValue> CountMinSketch<T> {
322323 ///
323324 /// # Examples
324325 ///
325- /// ```rust
326+ /// ```
326327 /// # use datasketches::countmin::CountMinSketch;
327328 /// # let mut sketch = CountMinSketch::<i64>::with_seed(4, 64, 7);
328329 /// # sketch.update("apple");
@@ -331,34 +332,40 @@ impl<T: CountMinValue> CountMinSketch<T> {
331332 /// assert!(decoded.estimate("apple") >= 1);
332333 /// ```
333334 pub fn deserialize_with_seed ( bytes : & [ u8 ] , seed : u64 ) -> Result < Self , Error > {
334- fn make_error ( tag : & ' static str ) -> impl FnOnce ( std:: io:: Error ) -> Error {
335- move |_| Error :: insufficient_data ( tag)
336- }
337-
338335 fn read_value < T : CountMinValue > (
339336 cursor : & mut SketchSlice < ' _ > ,
340337 tag : & ' static str ,
341338 ) -> Result < T , Error > {
342339 let mut bs = [ 0u8 ; 8 ] ;
343- cursor. read_exact ( & mut bs) . map_err ( make_error ( tag) ) ?;
340+ cursor. read_exact ( & mut bs) . map_err ( insufficient_data ( tag) ) ?;
344341 T :: try_from_bytes ( bs)
345342 }
346343
347344 let mut cursor = SketchSlice :: new ( bytes) ;
348- let preamble_longs = cursor. read_u8 ( ) . map_err ( make_error ( "preamble_longs" ) ) ?;
349- let serial_version = cursor. read_u8 ( ) . map_err ( make_error ( "serial_version" ) ) ?;
350- let family_id = cursor. read_u8 ( ) . map_err ( make_error ( "family_id" ) ) ?;
351- let flags = cursor. read_u8 ( ) . map_err ( make_error ( "flags" ) ) ?;
352- cursor. read_u32_le ( ) . map_err ( make_error ( "<unused>" ) ) ?;
345+ let preamble_longs = cursor
346+ . read_u8 ( )
347+ . map_err ( insufficient_data ( "preamble_longs" ) ) ?;
348+ let serial_version = cursor
349+ . read_u8 ( )
350+ . map_err ( insufficient_data ( "serial_version" ) ) ?;
351+ let family_id = cursor. read_u8 ( ) . map_err ( insufficient_data ( "family_id" ) ) ?;
352+ let flags = cursor. read_u8 ( ) . map_err ( insufficient_data ( "flags" ) ) ?;
353+ cursor
354+ . read_u32_le ( )
355+ . map_err ( insufficient_data ( "<unused>" ) ) ?;
353356
354357 Family :: COUNTMIN . validate_id ( family_id) ?;
355358 ensure_serial_version_is ( SERIAL_VERSION , serial_version) ?;
356359 ensure_preamble_longs_in ( & [ PREAMBLE_LONGS_SHORT ] , preamble_longs) ?;
357360
358- let num_buckets = cursor. read_u32_le ( ) . map_err ( make_error ( "num_buckets" ) ) ?;
359- let num_hashes = cursor. read_u8 ( ) . map_err ( make_error ( "num_hashes" ) ) ?;
360- let seed_hash = cursor. read_u16_le ( ) . map_err ( make_error ( "seed_hash" ) ) ?;
361- cursor. read_u8 ( ) . map_err ( make_error ( "unused8" ) ) ?;
361+ let num_buckets = cursor
362+ . read_u32_le ( )
363+ . map_err ( insufficient_data ( "num_buckets" ) ) ?;
364+ let num_hashes = cursor. read_u8 ( ) . map_err ( insufficient_data ( "num_hashes" ) ) ?;
365+ let seed_hash = cursor
366+ . read_u16_le ( )
367+ . map_err ( insufficient_data ( "seed_hash" ) ) ?;
368+ cursor. read_u8 ( ) . map_err ( insufficient_data ( "unused8" ) ) ?;
362369
363370 let expected_seed_hash = compute_seed_hash ( seed) ;
364371 if seed_hash != expected_seed_hash {
@@ -410,7 +417,7 @@ impl<T: UnsignedCountMinValue> CountMinSketch<T> {
410417 ///
411418 /// # Examples
412419 ///
413- /// ```rust
420+ /// ```
414421 /// # use datasketches::countmin::CountMinSketch;
415422 /// let mut sketch = CountMinSketch::<u64>::new(4, 128);
416423 /// sketch.update_with_weight("apple", 3);
@@ -431,7 +438,7 @@ impl<T: UnsignedCountMinValue> CountMinSketch<T> {
431438 ///
432439 /// # Examples
433440 ///
434- /// ```rust
441+ /// ```
435442 /// # use datasketches::countmin::CountMinSketch;
436443 /// let mut sketch = CountMinSketch::<u64>::new(4, 128);
437444 /// sketch.update_with_weight("apple", 3);
0 commit comments