Skip to main content

MastForestWireView

Struct MastForestWireView 

Source
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>

Source

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);
Source

pub fn node_count(&self) -> usize

Returns the number of nodes in the serialized forest.

Source

pub fn procedure_root_count(&self) -> usize

Returns the number of procedure roots in the serialized forest.

Source

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().

Source

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());
Source

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().

Source

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().

Source

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>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl MastForestView for MastForestWireView<'_>

Source§

fn node_count(&self) -> usize

Returns the number of nodes in the forest.
Source§

fn node_entry_at( &self, index: usize, ) -> Result<MastNodeEntry, DeserializationError>

Returns fixed-width structural metadata for a node at the specified index. Read more
Source§

fn node_digest_at(&self, index: usize) -> Result<Word, DeserializationError>

Returns the digest of the node at the specified index. Read more
Source§

fn procedure_root_count(&self) -> usize

Returns the number of procedure roots in the forest.
Source§

fn procedure_root_at( &self, index: usize, ) -> Result<MastNodeId, DeserializationError>

Returns the procedure root id at the specified index. Read more
Source§

fn advice_map(&self) -> AdviceMapView<'_>

Returns a read-only view over the forest advice map.
Source§

fn node_info_at( &self, index: usize, ) -> Result<MastNodeInfo, DeserializationError>

Returns serialized-equivalent metadata for a node at the specified index. Read more
Source§

fn is_empty(&self) -> bool

Returns true when the forest contains no nodes.
Source§

fn has_node(&self, index: usize) -> bool

Returns true when index is a valid node index.
Source§

fn all_node_infos(&self) -> Result<Vec<MastNodeInfo>, DeserializationError>

Returns all node infos in index order.
Source§

fn procedure_roots(&self) -> Result<Vec<MastNodeId>, DeserializationError>

Returns all procedure roots in index order.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more