pub struct XorbObjectInfoV1 {Show 13 fields
pub ident: XorbObjectIdent,
pub version: u8,
pub xorb_hash: MerkleHash,
pub ident_hash_section: XorbObjectIdent,
pub hashes_version: u8,
pub chunk_hashes: Vec<MerkleHash>,
pub ident_boundary_section: XorbObjectIdent,
pub boundaries_version: u8,
pub chunk_boundary_offsets: Vec<u32>,
pub unpacked_chunk_offsets: Vec<u32>,
pub num_chunks: u32,
pub hashes_section_offset_from_end: u32,
pub boundary_section_offset_from_end: u32,
/* private fields */
}Expand description
Info struct for XorbObject. This is stored at the end of the XORB.
Fields§
§ident: XorbObjectIdentXORB identifier: “XETBLOB”
version: u8Format version, expected to be 1 right now.
xorb_hash: MerkleHash256-bits, 32-bytes, The XORB Hash of this Xorb.
ident_hash_section: XorbObjectIdentThe hashes section XORB identifier: “XBLBHSH”
hashes_version: u8The version of the chunk hash section.
chunk_hashes: Vec<MerkleHash>Total number of chunks in the Xorb. Duplicated here. This only exists in the physical serialized layout. Merklehash for each chunk stored in the Xorb. Length of vector is num_chunks.
ident_boundary_section: XorbObjectIdentThe boundaries and index metadata The identity for the metadata section; should be “XBLBMDT”
boundaries_version: u8The version of the boundary section.
chunk_boundary_offsets: Vec<u32>Total number of chunks in the Xorb. Duplicated here. This only exists in the physical serialized layout Byte offset marking the boundary of each chunk in physical layout including chunk header. Length of vector is num_chunks.
This vector only contains boundaries, so assumes the first chunk starts at offset 0. The final entry in vector is the total length of the chunks. See example below. chunk[n] are bytes in [chunk_boundary_offsets[n-1], chunk_boundary_offsets[n])
// ex. chunks: [ 0, 1, 2, 3 ]
// chunk_boundary_offsets: [ 100, 200, 300, 400]unpacked_chunk_offsets: Vec<u32>The byte offsets marking the boundary of each chunk in uncompressed layout without header, assuming that each chunk gets unzipped and concatenated. Length of vector is num_chunks. This permits range queries on the contents of the xorb. The uncompressed length of chunk k can be determined by unpacked_chunk_offsets[k] - unpacked_chunk_offsets[k - 1].
num_chunks: u32Below this everything is fixed; these fields are in exactly the same place.
Total number of chunks in the Xorb. This is also duplicated in the serialization at the start of each section.
hashes_section_offset_from_end: u32§boundary_section_offset_from_end: u32Implementations§
Source§impl XorbObjectInfoV1
impl XorbObjectInfoV1
pub fn serialized_length(&self) -> usize
Sourcepub fn serialize<W: Write>(&self, writer: &mut W) -> Result<usize, CoreError>
pub fn serialize<W: Write>(&self, writer: &mut W) -> Result<usize, CoreError>
Serialize XorbObjectInfoV1 to provided Writer.
Assumes caller has set position of Writer to appropriate location for serialization.
Sourcepub fn deserialize<R: Read>(reader: &mut R) -> Result<(Self, u32), CoreError>
pub fn deserialize<R: Read>(reader: &mut R) -> Result<(Self, u32), CoreError>
Construct XorbObjectInfo object from Reader + Seek.
Expects metadata struct is found at end of Reader, written out in struct order.
Sourcepub fn deserialize_only_boundaries_section<R: Read + Seek>(
reader: &mut R,
) -> Result<(Self, u32), CoreError>
pub fn deserialize_only_boundaries_section<R: Read + Seek>( reader: &mut R, ) -> Result<(Self, u32), CoreError>
Construct XorbObjectInfo object from Reader + Seek.
Expects metadata struct is found at end of Reader, written out in struct order.
pub async fn deserialize_async_v1<R: AsyncRead + Unpin>( reader: &mut R, ) -> Result<(Self, u32), CoreError>
Sourcepub async fn deserialize_async<R: AsyncRead + Unpin>(
reader: &mut R,
version: u8,
) -> Result<(Self, u32), CoreError>
pub async fn deserialize_async<R: AsyncRead + Unpin>( reader: &mut R, version: u8, ) -> Result<(Self, u32), CoreError>
Construct XorbObjectInfo object from AsyncRead. assumes that the ident and version have already been read and verified.
verifies that the length of the footer data matches the length field at the very end of the buffer
pub fn from_v0(src: XorbObjectInfoV0) -> Self
pub fn from_v0_with_unpacked_chunk_offsets( src: XorbObjectInfoV0, unpacked_chunk_offsets: Vec<u32>, ) -> Self
pub fn fill_in_boundary_offsets(&mut self)
pub fn has_chunk_hashes(&self) -> bool
Trait Implementations§
Source§impl Clone for XorbObjectInfoV1
impl Clone for XorbObjectInfoV1
Source§fn clone(&self) -> XorbObjectInfoV1
fn clone(&self) -> XorbObjectInfoV1
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for XorbObjectInfoV1
impl Debug for XorbObjectInfoV1
Source§impl Default for XorbObjectInfoV1
impl Default for XorbObjectInfoV1
Source§impl PartialEq for XorbObjectInfoV1
impl PartialEq for XorbObjectInfoV1
Source§impl Serialize for XorbObjectInfoV1
impl Serialize for XorbObjectInfoV1
impl Eq for XorbObjectInfoV1
impl StructuralPartialEq for XorbObjectInfoV1
Auto Trait Implementations§
impl Freeze for XorbObjectInfoV1
impl RefUnwindSafe for XorbObjectInfoV1
impl Send for XorbObjectInfoV1
impl Sync for XorbObjectInfoV1
impl Unpin for XorbObjectInfoV1
impl UnsafeUnpin for XorbObjectInfoV1
impl UnwindSafe for XorbObjectInfoV1
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DropFlavorWrapper<T> for T
impl<T> DropFlavorWrapper<T> for T
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more