#[cfg(feature = "debug")]
use dusk_curves::bls12_381::BlsScalar;
#[cfg(feature = "debug")]
use crate::debugger::Debugger;
#[cfg(feature = "debug")]
use crate::prelude::{Constraint, Witness};
#[derive(Debug, Clone, Copy)]
#[allow(clippy::large_enum_variant)]
pub enum RuntimeEvent {
WitnessAppended {
#[cfg(feature = "debug")]
w: Witness,
#[cfg(feature = "debug")]
v: BlsScalar,
},
ConstraintAppended {
#[cfg(feature = "debug")]
c: Constraint,
},
ProofFinished,
}
#[derive(Debug, Clone)]
pub struct Runtime {
#[cfg(feature = "debug")]
debugger: Debugger,
}
impl Default for Runtime {
fn default() -> Self {
Self::new()
}
}
impl Runtime {
#[allow(unused_variables)]
pub fn new() -> Self {
Self {
#[cfg(feature = "debug")]
debugger: Debugger::new(),
}
}
#[allow(unused_variables)]
pub(crate) fn event(&mut self, event: RuntimeEvent) {
#[cfg(feature = "debug")]
self.debugger.event(event);
}
}
#[cfg(test)]
mod tests {
#[cfg(feature = "debug")]
use dusk_curves::bls12_381::BlsScalar;
use super::*;
#[cfg(feature = "debug")]
use crate::prelude::{Constraint, Witness};
#[test]
fn runtime_new_default_and_events_do_not_panic() {
let mut rt = Runtime::new();
rt.event(RuntimeEvent::WitnessAppended {
#[cfg(feature = "debug")]
w: Witness::ZERO,
#[cfg(feature = "debug")]
v: BlsScalar::from(42u64),
});
rt.event(RuntimeEvent::ConstraintAppended {
#[cfg(feature = "debug")]
c: Constraint::new(),
});
rt.event(RuntimeEvent::ProofFinished);
let mut rt2 = Runtime::default();
rt2.event(RuntimeEvent::ProofFinished);
}
}