bsv/interpreter/
state.rs

1use std::fmt::Display;
2
3use crate::{OpCodes, ToHex};
4use serde::{Deserialize, Serialize};
5
6use crate::Status;
7
8#[derive(Default, Clone, Serialize, Deserialize)]
9pub struct State {
10    pub stack: Vec<Vec<u8>>,
11    pub alt_stack: Vec<Vec<u8>>,
12    pub status: Status,
13    pub executed_opcodes: Vec<OpCodes>,
14    pub codeseparator_offset: usize,
15}
16
17impl State {
18    /// Get a reference to the state's stack.
19    #[must_use]
20    pub fn stack(&self) -> &[Vec<u8>] {
21        self.stack.as_ref()
22    }
23}
24
25impl Display for State {
26    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
27        write!(
28            f,
29            r#"Stack: {:?}
30Alt Stack: {:?}
31Executed OpCodes: {:?}
32        "#,
33            self.stack.iter().map(|data| data.to_hex()).collect::<Vec<String>>(),
34            self.alt_stack.iter().map(|data| data.to_hex()).collect::<Vec<String>>(),
35            self.executed_opcodes
36        )
37    }
38}