use crate::{Expression, Node, NodeID, Statement};
use leo_span::Span;
use serde::{Deserialize, Serialize};
use std::fmt;
#[derive(Clone, PartialEq, Eq, Serialize, Deserialize, Debug)]
pub enum AssertVariant {
Assert(Expression),
AssertEq(Expression, Expression),
AssertNeq(Expression, Expression),
}
#[derive(Clone, PartialEq, Eq, Serialize, Deserialize, Debug)]
pub struct AssertStatement {
pub variant: AssertVariant,
pub span: Span,
pub id: NodeID,
}
impl fmt::Display for AssertStatement {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self.variant {
AssertVariant::Assert(ref expr) => write!(f, "assert({expr})"),
AssertVariant::AssertEq(ref expr1, ref expr2) => write!(f, "assert_eq({expr1}, {expr2})"),
AssertVariant::AssertNeq(ref expr1, ref expr2) => write!(f, "assert_neq({expr1}, {expr2})"),
}
}
}
impl From<AssertStatement> for Statement {
fn from(value: AssertStatement) -> Self {
Statement::Assert(value)
}
}
crate::simple_node_impl!(AssertStatement);