telltale_vm/driver/
single_thread.rs1use crate::effect::EffectHandler;
4use crate::kernel::VMKernel;
5use crate::loader::CodeImage;
6use crate::owned::OwnedSession;
7use crate::vm::{ObsEvent, RunStatus, StepResult, VMConfig, VMError, VM};
8
9#[derive(Debug)]
11pub struct NativeSingleThreadDriver {
12 vm: VM,
13}
14
15impl NativeSingleThreadDriver {
16 #[must_use]
18 pub fn new(config: VMConfig) -> Self {
19 Self {
20 vm: VM::new(config),
21 }
22 }
23
24 #[must_use]
26 pub fn with_vm(vm: VM) -> Self {
27 Self { vm }
28 }
29
30 #[must_use]
32 pub fn vm(&self) -> &VM {
33 &self.vm
34 }
35
36 pub fn load_choreography_owned(
42 &mut self,
43 image: &CodeImage,
44 owner_id: impl Into<String>,
45 ) -> Result<OwnedSession, VMError> {
46 self.vm.load_choreography_owned(image, owner_id)
47 }
48
49 pub fn step_round(
55 &mut self,
56 handler: &dyn EffectHandler,
57 n: usize,
58 ) -> Result<StepResult, VMError> {
59 VMKernel::step_round(&mut self.vm, handler, n)
60 }
61
62 pub fn run(
68 &mut self,
69 handler: &dyn EffectHandler,
70 max_rounds: usize,
71 n: usize,
72 ) -> Result<RunStatus, VMError> {
73 VMKernel::run_concurrent(&mut self.vm, handler, max_rounds, n)
74 }
75
76 #[must_use]
78 pub fn trace(&self) -> &[ObsEvent] {
79 self.vm.trace()
80 }
81}