use crate::ir::{Expr, Program};
use crate::ops::OpSpec;
use crate::ops::rule::condition_op;
impl PatternExists {
/// Declarative operation specification.
pub const SPEC: OpSpec = condition_op::spec(OP_ID, Self::program);
/// Build the canonical IR program.
///
/// # Examples
///
/// ```
/// use vyre::ops::rule::pattern_exists::PatternExists;
///
/// assert!(!PatternExists::program().entry().is_empty());
/// ```
#[must_use]
pub fn program() -> Program {
condition_op::condition_program(|| Expr::ne(condition_op::pattern_state(), Expr::u32(0)))
}
}
/// Stable operation id for pattern existence checks.
pub const OP_ID: &str = "rule.pattern_exists";
/// Pattern existence condition operation.
#[derive(Debug, Clone, Copy, Default)]
pub struct PatternExists;