Function values_from

Source
pub fn values_from<'a, T: VarInt>(buf: &'a [u8]) -> VarIntValuesIter<'a, T> 
Expand description

Helper function to create a values decoder from a buffer

Examples found in repository?
examples/iter_example.rs (line 58)
15fn main() {
16    println!("=== Iterator-based API Example ===\n");
17    
18    // 1. Encoding a single value using VarIntBytesIter iterator
19    println!("1. Encoding a single value using VarIntBytesIter iterator:");
20    let value = 16384u64;
21    
22    println!("  Encoding value: {}", value);
23    println!("  Expected bytes: {}", tiny_varint::varint_size(value));
24    
25    print!("  Encoded bytes: [ ");
26    for byte in bytes_of(value) {
27        print!("{:#04x} ", byte);
28    }
29    println!("]");
30    
31    // Manually verify the result
32    let mut manual_buf = [0u8; 10];
33    let manual_size = tiny_varint::encode(value, &mut manual_buf).unwrap();
34    
35    print!("  Verification bytes: [ ");
36    for i in 0..manual_size {
37        print!("{:#04x} ", manual_buf[i]);
38    }
39    println!("]\n");
40    
41    // 2. Decoding using VarIntValuesIter iterator
42    println!("2. Decoding using VarIntValuesIter iterator:");
43    
44    // Create a buffer containing multiple varints
45    let values = [0u64, 1, 127, 128, 16383, 16384, 2097151];
46    let mut buffer = [0u8; 100];
47    
48    let mut encoder = VarIntEncoder::new(&mut buffer);
49    let bytes_written = encoder.write_batch(&values).unwrap();
50    
51    print!("  Encoded bytes: [ ");
52    for i in 0..bytes_written {
53        print!("{:#04x} ", buffer[i]);
54    }
55    println!("]");
56    
57    println!("  Decoded values:");
58    for result in values_from::<u64>(&buffer[..bytes_written]) {
59        match result {
60            Ok(value) => println!("    - {}", value),
61            Err(e) => println!("    - Error: {:?}", e),
62        }
63    }
64    
65    // 3. Processing zigzag-encoded values without intermediate buffers
66    println!("\n3. Processing zigzag-encoded signed values:");
67    
68    let signed_values = [-100i32, -50, -10, -1, 0, 1, 10, 50, 100];
69    println!("  Original values: {:?}", signed_values);
70    
71    // Create a zigzag-encoded byte iterator for each value
72    for &value in &signed_values {
73        // First apply zigzag encoding
74        let mut buf = [0u8; 10];
75        let size = encode_zigzag(value, &mut buf).unwrap();
76        
77        print!("  ZigZag encoding for {}: [ ", value);
78        for i in 0..size {
79            print!("{:#04x} ", buf[i]);
80        }
81        println!("]");
82    }
83    
84    // 4. Combining iterators with encoders/decoders
85    println!("\n4. Combining iterators with encoders/decoders in stream processing:");
86    
87    // Simulate a simple data processing pipeline
88    println!("  Data processing pipeline:");
89    println!("    1. Generate raw data");
90    println!("    2. Encode using iterator-based methods");
91    println!("    3. Process encoded bytes");
92    println!("    4. Decode using iterator-based methods");
93    
94    // Raw data
95    let source_data = [42u64, 314, 2718, 31415];
96    println!("\n  Raw data: {:?}", source_data);
97    
98    // Encode and collect
99    let mut encoded_bytes = Vec::new();
100    
101    for &value in &source_data {
102        let encoder = bytes_of(value);
103        println!("  Encoding {} -> {} bytes", value, encoder.size());
104        
105        // Add bytes to our buffer
106        for byte in encoder {
107            encoded_bytes.push(byte);
108        }
109    }
110    
111    print!("  All encoded bytes: [ ");
112    for byte in &encoded_bytes {
113        print!("{:#04x} ", byte);
114    }
115    println!("]");
116    
117    // Decode bytes
118    println!("\n  Decoding results:");
119    let decoder = values_from::<u64>(&encoded_bytes);
120    
121    let mut i = 0;
122    for result in decoder {
123        match result {
124            Ok(value) => {
125                println!("    Original: {}, Decoded: {}", source_data[i], value);
126                i += 1;
127            }
128            Err(e) => println!("    Error: {:?}", e),
129        }
130    }
131    
132    println!("\n=== Example Complete ===");
133}