1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//! `NibbleRun` - High-performance time series compression for slow-changing data
//!
//! A bit-packed compression format optimized for sensor data that changes gradually,
//! such as temperature, humidity, or similar environmental readings.
//!
//! # Example
//! ```
//! use nibblerun::Encoder;
//!
//! let mut encoder: Encoder<i32> = Encoder::new();
//! let base_ts = 1_761_000_000_u32;
//!
//! encoder.append(base_ts, 22).unwrap();
//! encoder.append(base_ts + 300, 22).unwrap();
//! encoder.append(base_ts + 600, 23).unwrap();
//!
//! // Decode from encoder
//! let readings = encoder.decode().unwrap();
//! for r in &readings {
//! println!("ts={}, value={}", r.ts, r.value);
//! }
//!
//! // Freeze for storage and decode later
//! let frozen = encoder.freeze();
//! let readings = nibblerun::decode_frozen::<i32, 300>(&frozen).unwrap();
//! ```
//!
//! # Two Serialization Formats
//!
//! NibbleRun provides two formats:
//!
//! - **Appendable format** (`to_bytes()` / `from_bytes()`): Preserves internal state,
//! allowing you to continue appending readings after deserialization.
//!
//! - **Frozen format** (`freeze()` / `decode_frozen()`): Compact read-only format
//! for long-term storage. Cannot be restored to an encoder.
// Panic-free library: disallow unwrap/expect/panic in library code
// Re-export public API
pub use decode_frozen;
pub use Encoder;
pub use ;
pub use Reading;
pub use Value;