| use std::io::Read; | 
 |  | 
 | /// Decode variable int numbers from a `Read` implementation. | 
 | /// | 
 | /// Note: currently overflow checks are only done in debug mode. | 
 | #[inline] | 
 | pub fn leb64_from_read(mut r: impl Read) -> Result<(u64, usize), std::io::Error> { | 
 |     let mut b = [0u8; 1]; | 
 |     let mut i = 0; | 
 |     r.read_exact(&mut b)?; | 
 |     i += 1; | 
 |     let mut value = b[0] as u64 & 0x7f; | 
 |     while b[0] & 0x80 != 0 { | 
 |         r.read_exact(&mut b)?; | 
 |         i += 1; | 
 |         debug_assert!(i <= 10, "Would overflow value at 11th iteration"); | 
 |         value += 1; | 
 |         value = (value << 7) + (b[0] as u64 & 0x7f) | 
 |     } | 
 |     Ok((value, i)) | 
 | } | 
 |  | 
 | /// Decode variable int numbers. | 
 | #[inline] | 
 | pub fn leb64(d: &[u8]) -> (u64, usize) { | 
 |     let mut i = 0; | 
 |     let mut c = d[i]; | 
 |     i += 1; | 
 |     let mut value = c as u64 & 0x7f; | 
 |     while c & 0x80 != 0 { | 
 |         c = d[i]; | 
 |         i += 1; | 
 |         debug_assert!(i <= 10, "Would overflow value at 11th iteration"); | 
 |         value += 1; | 
 |         value = (value << 7) + (c as u64 & 0x7f) | 
 |     } | 
 |     (value, i) | 
 | } |