jade_testing/
util.rs

1//! Prelude for the PVM testing library
2
3use anyhow::{Context, Result};
4use cjam::ModuleType;
5use tracing_subscriber::EnvFilter;
6
7/// Initialize the logger
8pub fn init_logger() {
9    unsafe {
10        spacevm::init_logger(true, true);
11    }
12
13    let _ = tracing_subscriber::fmt()
14        .with_env_filter(EnvFilter::from_default_env())
15        .try_init();
16}
17
18/// Load the service
19pub fn load_service(package: &str) -> Result<Vec<u8>> {
20    let target = etc::find_up("target")
21        .expect("Failed to find target directory")
22        .join("jam")
23        .join(format!("{package}.jam"));
24
25    std::fs::read(&target).context(format!("Failed to read {}", target.display()))
26}
27
28/// Build the service
29pub fn build_service(package: &str, module: Option<ModuleType>) {
30    cjam::util::build(package, module).expect("Failed to build service");
31}
32
33/// Load the current service
34#[macro_export]
35macro_rules! service {
36    () => {{
37        $crate::util::init_logger();
38        match $crate::util::load_service(env!("CARGO_PKG_NAME")) {
39            Ok(blob) => blob,
40            Err(e) => {
41                $crate::util::build_service(
42                    env!("CARGO_PKG_NAME"),
43                    Some(env!("CARGO_MANIFEST_DIR").to_string()),
44                );
45                $crate::util::load_service(env!("CARGO_PKG_NAME")).expect("Failed to load service")
46            }
47        }
48    }};
49}