/// The macro to define `ArcisType`, which we use to help run the tests.
/// * input and output generation
/// * formatting to use arcis_compiler functions
/// * packing and unpacking
/// * random generation in `ArcisRNG::gen_uniform`
mod arcis_type;
/// Finds all `#[instruction]` and runs the interpreter on them.
mod circuit_builder;
/// Finds and parse the standard dependencies and the user-made dependencies.
mod dependencies;
/// Our `Error` type. Inspired from `syn::Error`.
mod error;
/// Helps clean the `#[encrypted]` module before returning from the macro.
/// * Removes helper attributes like `#[instruction]`.
/// * Adds `#[derive(ArcisType)]` on every `struct`.
mod helper_cleaner;
/// Finds all `#[instruction]`. Only used by `arcis-interpreter-random-tests`.
mod instruction_finder;
/// The `Interpreter`.
mod interpreter;
/// A builder for the `Interpreter`. Helps with lifetime issues.
mod interpreter_builder;
/// The `#[encrypted_library]` macro.
mod library;
/// Something to parse macros like `println!`.
mod macro_parser;
/// The `#[encrypted]` macro.
mod module;
/// Some tools for `arcium profile`.
mod profile;
/// Contains examples that we want to fail with the right error message.
#[cfg(test)]
mod tests;
/// Utilities.
mod utils;

pub use crate::{
    arcis_type::arcis_type_macro,
    instruction_finder::InstructionFinder,
    interpreter_builder::InterpreterBuilder,
    library::library_macro,
    module::{module_macro, run_interpreter_on_module},
    utils::error_macro,
};
