openvm_circuit/arch/
deferral.rs1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5pub type InputRaw = Vec<u8>;
6pub type OutputRaw = Vec<u8>;
7pub type InputCommit = Vec<u8>;
8pub type OutputCommit = Vec<u8>;
9
10#[derive(Clone, Debug, Serialize, Deserialize)]
11pub enum InputMapVal {
12 Raw(InputRaw),
13 Output(OutputCommit),
14}
15
16#[derive(Clone, Debug, derive_new::new)]
17pub struct DeferralResult {
18 pub input: InputCommit,
19 pub output_commit: OutputCommit,
20 pub output_raw: OutputRaw,
21}
22
23#[derive(Clone, Debug, Default, Serialize, Deserialize)]
24pub struct DeferralState {
25 input_map: HashMap<InputCommit, InputMapVal>,
26 output_map: HashMap<OutputCommit, OutputRaw>,
27}
28
29impl DeferralState {
30 pub fn new(generated: Vec<DeferralResult>) -> Self {
31 let (input_map, output_map) = generated
32 .into_iter()
33 .map(|res| {
34 (
35 (res.input, InputMapVal::Output(res.output_commit.clone())),
36 (res.output_commit, res.output_raw),
37 )
38 })
39 .unzip();
40 Self {
41 input_map,
42 output_map,
43 }
44 }
45
46 pub fn store_input(&mut self, input_commit: InputCommit, input_raw: InputRaw) {
47 self.input_map
48 .insert(input_commit, InputMapVal::Raw(input_raw));
49 }
50
51 pub fn store_output(
52 &mut self,
53 input_commit: &InputCommit,
54 output_commit: OutputCommit,
55 output_raw: OutputRaw,
56 ) {
57 *(self.input_map.get_mut(input_commit).unwrap()) =
58 InputMapVal::Output(output_commit.clone());
59 self.output_map.insert(output_commit, output_raw);
60 }
61
62 pub fn get_input(&self, input_commit: &InputCommit) -> &InputMapVal {
63 self.input_map.get(input_commit).unwrap()
64 }
65
66 pub fn get_output(&self, output_commit: &OutputCommit) -> &OutputRaw {
67 self.output_map.get(output_commit).unwrap()
68 }
69}