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
/// Type of file.
///
/// `signatures`, `bitfield` and `tree` are the three SLEEP files. There are two
///additional files, `key`, and `data`, which do not contain SLEEP file headers
///and store plain serialized data for easy access. `key` stores the public key
///that is described by the `signatures` file, and `data` stores the raw chunk
///data that the `tree` file contains the hashes and metadata.
#[derive(Debug, PartialEq)]
pub enum FileType {
/// The bitfield describes which pieces of data you have, and which nodes in
/// the tree file have been written. This file exists as an index of the tree
/// and data to quickly figure out which pieces of data you have or are
/// missing. This file can be regenerated if you delete it, so it is
/// considered a materialized index.
BitField,
/// A SLEEP formatted 32 byte header with data entries being 64 byte
/// signatures.
Signatures,
/// A SLEEP formatted 32 byte header with data entries representing a
/// serialized Merkle tree based on the data in the data storage layer. All
/// the fixed size nodes written in in-order tree notation. The header
/// algorithm string for `tree` files is `BLAKE2b`. The entry size is 40
/// bytes.
Tree,
}
impl FileType {
/// Returns true if the file is `BitField`
#[inline]
pub fn is_bitfield(&self) -> bool {
*self == FileType::BitField
}
/// Returns true if the file is `Signatures`
#[inline]
pub fn is_signatures(&self) -> bool {
*self == FileType::Signatures
}
/// Returns true if the file is `Tree`
#[inline]
pub fn is_tree(&self) -> bool {
*self == FileType::Tree
}
}