1use std::fmt::Display;
8
9use foundry_evm::executors::ExecutorStrategy;
10
11use crate::executor::{
12 context::ReviveExecutorStrategyContext, runner::ReviveExecutorStrategyRunner,
13};
14
15mod backend;
16mod cheatcodes;
17mod executor;
18mod state;
19mod tracing;
20
21pub use cheatcodes::{PvmCheatcodeInspectorStrategyBuilder, ReviveStartupMigration};
22
23#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
25pub enum ReviveRuntimeMode {
26 Pvm,
28 #[default]
29 Evm,
31}
32
33impl Display for ReviveRuntimeMode {
34 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
35 match self {
36 Self::Pvm => write!(f, "PVM"),
37 Self::Evm => write!(f, "EVM"),
38 }
39 }
40}
41
42pub trait ReviveExecutorStrategyBuilder {
44 fn new_revive(runtime_mode: ReviveRuntimeMode) -> Self;
46}
47
48impl ReviveExecutorStrategyBuilder for ExecutorStrategy {
49 fn new_revive(runtime_mode: ReviveRuntimeMode) -> Self {
50 Self {
51 runner: Box::leak(Box::new(ReviveExecutorStrategyRunner::new())),
52 context: Box::new(ReviveExecutorStrategyContext::new(runtime_mode)),
53 }
54 }
55}