pub struct MastForestWireView<'a> { /* private fields */ }Expand description
A trusted wire-backed view over serialized MAST forest bytes.
This view accepts complete payloads with hashes. It validates the header and the fixed-width structural sections needed for random access, but it does not fully materialize the forest. Hashless payloads are rejected because trusted cache bytes must be complete. Trailing payloads are rejected because debug metadata now belongs to package-owned debug sections.
Use this when callers need random access to roots or node metadata without deserializing the
full forest. For strict trusted deserialization, use
crate::mast::MastForest::read_from_bytes.
§Examples
use miden_core::{
mast::{BasicBlockNodeBuilder, MastForest, MastForestContributor, MastForestWireView},
operations::Operation,
serde::Serializable,
};
let mut forest = MastForest::new();
let block_id = BasicBlockNodeBuilder::new(vec![Operation::Add])
.add_to_forest(&mut forest)
.unwrap();
forest.make_root(block_id);
let mut bytes = Vec::new();
forest.write_into(&mut bytes);
let view = MastForestWireView::new(&bytes).unwrap();
assert_eq!(view.node_count(), forest.nodes().len());
assert!(view.node_info_at(0).is_ok());Implementations§
Source§impl<'a> MastForestWireView<'a>
impl<'a> MastForestWireView<'a>
Sourcepub fn new(
bytes: &'a [u8],
) -> Result<MastForestWireView<'a>, DeserializationError>
pub fn new( bytes: &'a [u8], ) -> Result<MastForestWireView<'a>, DeserializationError>
Creates a new view from serialized bytes.
The input must include all node hashes. Structural parsing is delegated to the same single-pass scanner used by reader-based deserialization paths.
This constructor validates the header and sections needed for node/roots/random-access
metadata, indexes AdviceMap keys for on-demand lookup, and rejects trailing payloads.
Treat this as a trusted cache API, not as an untrusted-validation entry point. It is
appropriate for local tools that need random access over serialized structure, but callers
handling adversarial bytes should use crate::mast::UntrustedMastForest instead.
In particular, this constructor does not protect callers from untrusted-input concerns
that are enforced by crate::mast::UntrustedMastForest::validate. It does not:
- verify that serialized non-external digests match the structure they describe
- check topological ordering / forward-reference constraints
- validate basic-block batch invariants
- materialize or expose package-owned debug sections
For strict materialized validation, use
crate::mast::MastForest::read_from_bytes.
Digest lookup follows the wire layout:
- Non-external node digests are read from the internal-hash section.
- External node digests are read from the external-digest section.
§Examples
use miden_core::{
mast::{BasicBlockNodeBuilder, MastForest, MastForestContributor, MastForestWireView},
operations::Operation,
serde::Serializable,
};
let mut forest = MastForest::new();
let block_id = BasicBlockNodeBuilder::new(vec![Operation::Add])
.add_to_forest(&mut forest)
.unwrap();
forest.make_root(block_id);
let mut bytes = Vec::new();
forest.write_into(&mut bytes);
let view = MastForestWireView::new(&bytes).unwrap();
assert_eq!(view.node_count(), 1);Sourcepub fn node_count(&self) -> usize
pub fn node_count(&self) -> usize
Returns the number of nodes in the serialized forest.
Sourcepub fn procedure_root_count(&self) -> usize
pub fn procedure_root_count(&self) -> usize
Returns the number of procedure roots in the serialized forest.
Sourcepub fn procedure_root_at(
&self,
index: usize,
) -> Result<MastNodeId, DeserializationError>
pub fn procedure_root_at( &self, index: usize, ) -> Result<MastNodeId, DeserializationError>
Returns the procedure root id at the specified index.
Returns an error if index >= self.procedure_root_count().
Sourcepub fn node_info_at(
&self,
index: usize,
) -> Result<MastNodeInfo, DeserializationError>
pub fn node_info_at( &self, index: usize, ) -> Result<MastNodeInfo, DeserializationError>
Returns the MastNodeInfo at the specified index.
Returns an error if index >= self.node_count().
§Examples
use miden_core::{
mast::{BasicBlockNodeBuilder, MastForest, MastForestContributor, MastForestWireView},
operations::Operation,
serde::Serializable,
};
let mut forest = MastForest::new();
let block_id = BasicBlockNodeBuilder::new(vec![Operation::Add])
.add_to_forest(&mut forest)
.unwrap();
forest.make_root(block_id);
let mut bytes = Vec::new();
forest.write_into(&mut bytes);
let view = MastForestWireView::new(&bytes).unwrap();
assert!(view.node_info_at(0).is_ok());Sourcepub fn node_entry_at(
&self,
index: usize,
) -> Result<MastNodeEntry, DeserializationError>
pub fn node_entry_at( &self, index: usize, ) -> Result<MastNodeEntry, DeserializationError>
Returns the fixed-width structural node entry at the specified index.
Returns an error if index >= self.node_count().
Sourcepub fn node_digest_at(&self, index: usize) -> Result<Word, DeserializationError>
pub fn node_digest_at(&self, index: usize) -> Result<Word, DeserializationError>
Returns the digest for the node at the specified index.
Returns an error if index >= self.node_count().
Sourcepub fn advice_map(&self) -> AdviceMapView<'_>
pub fn advice_map(&self) -> AdviceMapView<'_>
Returns a read-only view over the serialized forest advice map.
Trait Implementations§
Source§impl<'a> Debug for MastForestWireView<'a>
impl<'a> Debug for MastForestWireView<'a>
Source§impl MastForestView for MastForestWireView<'_>
impl MastForestView for MastForestWireView<'_>
Source§fn node_count(&self) -> usize
fn node_count(&self) -> usize
Source§fn node_entry_at(
&self,
index: usize,
) -> Result<MastNodeEntry, DeserializationError>
fn node_entry_at( &self, index: usize, ) -> Result<MastNodeEntry, DeserializationError>
Source§fn node_digest_at(&self, index: usize) -> Result<Word, DeserializationError>
fn node_digest_at(&self, index: usize) -> Result<Word, DeserializationError>
Source§fn procedure_root_count(&self) -> usize
fn procedure_root_count(&self) -> usize
Source§fn procedure_root_at(
&self,
index: usize,
) -> Result<MastNodeId, DeserializationError>
fn procedure_root_at( &self, index: usize, ) -> Result<MastNodeId, DeserializationError>
Source§fn advice_map(&self) -> AdviceMapView<'_>
fn advice_map(&self) -> AdviceMapView<'_>
Source§fn node_info_at(
&self,
index: usize,
) -> Result<MastNodeInfo, DeserializationError>
fn node_info_at( &self, index: usize, ) -> Result<MastNodeInfo, DeserializationError>
Source§fn all_node_infos(&self) -> Result<Vec<MastNodeInfo>, DeserializationError>
fn all_node_infos(&self) -> Result<Vec<MastNodeInfo>, DeserializationError>
Source§fn procedure_roots(&self) -> Result<Vec<MastNodeId>, DeserializationError>
fn procedure_roots(&self) -> Result<Vec<MastNodeId>, DeserializationError>
Auto Trait Implementations§
impl<'a> !Freeze for MastForestWireView<'a>
impl<'a> RefUnwindSafe for MastForestWireView<'a>
impl<'a> Send for MastForestWireView<'a>
impl<'a> Sync for MastForestWireView<'a>
impl<'a> Unpin for MastForestWireView<'a>
impl<'a> UnsafeUnpin for MastForestWireView<'a>
impl<'a> UnwindSafe for MastForestWireView<'a>
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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 moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more