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
use crate::common::{
Bytes32,
Prefix,
PrefixError,
};
/// **Leaf buffer:**
///
/// | Allocation | Data |
/// |------------|----------------------------|
/// | `00 - 04` | Height (4 bytes) |
/// | `04 - 05` | Prefix (1 byte, `0x00`) |
/// | `05 - 37` | hash(Key) (32 bytes) |
/// | `37 - 69` | hash(Data) (32 bytes) |
///
/// **Node buffer:**
///
/// | Allocation | Data |
/// |------------|----------------------------|
/// | `00 - 04` | Height (4 bytes) |
/// | `04 - 05` | Prefix (1 byte, `0x01`) |
/// | `05 - 37` | Left child key (32 bytes) |
/// | `37 - 69` | Right child key (32 bytes) |
pub type Primitive = (u32, u8, Bytes32, Bytes32);
pub trait PrimitiveView {
fn height(&self) -> u32;
fn prefix(&self) -> Result<Prefix, PrefixError>;
fn bytes_lo(&self) -> &Bytes32;
fn bytes_hi(&self) -> &Bytes32;
}
impl PrimitiveView for Primitive {
fn height(&self) -> u32 {
self.0
}
fn prefix(&self) -> Result<Prefix, PrefixError> {
Prefix::try_from(self.1)
}
fn bytes_lo(&self) -> &Bytes32 {
&self.2
}
fn bytes_hi(&self) -> &Bytes32 {
&self.3
}
}