Skip to main content

aranya_policy_module/instructions/
meta.rs

1use core::fmt;
2
3use aranya_policy_ast::Identifier;
4use serde::{Deserialize, Serialize};
5
6/// Compiler Tracer metadata
7#[derive(
8    Debug,
9    Clone,
10    PartialEq,
11    Eq,
12    Serialize,
13    Deserialize,
14    rkyv::Archive,
15    rkyv::Deserialize,
16    rkyv::Serialize,
17)]
18pub enum Meta {
19    /// A variable has been defined
20    Let(Identifier),
21    /// A varible has been retrieved
22    Get(Identifier),
23    /// Set finish state
24    Finish(bool),
25    /// Mark an FFI call (module name, procedure name)
26    FFI(Identifier, Identifier),
27}
28
29impl fmt::Display for Meta {
30    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
31        match self {
32            Self::Let(n) => write!(f, "Set `{n}`"),
33            Self::Get(n) => write!(f, "Get `{n}`"),
34            Self::Finish(b) => {
35                if *b {
36                    write!(f, "finish enabled")
37                } else {
38                    write!(f, "finish disabled")
39                }
40            }
41            Self::FFI(module, procedure) => write!(f, "FFI call `{module}.{procedure}"),
42        }
43    }
44}