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 #[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}