1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
/// Given pairs of arbitrary keys and values, prints "key: value" to python intepreter.
/// Given str, prints str.
/// Using this will break `cargo test` but work with `maturin develop`.
#[macro_export]
macro_rules! print_to_py {
( $( $x:expr, $y:expr ),* ) => {
{
pyo3::Python::with_gil(|py| {
let locals = pyo3::types::PyDict::new(py);
$(
locals.set_item($x, $y).unwrap();
py.run(
&format!("print(f\"{}: {{{}:.3g}}\")", $x, $x),
None,
Some(locals),
)
.expect(&format!("printing `{}` failed", $x));
)*
});
};
};
( $x:expr ) => {
{
// use pyo3::py_run;
pyo3::Python::with_gil(|py| {
py.run(
&format!("print({})", $x),
None,
None,
)
.expect(&format!("printing `{}` failed", $x));
});
};
}
}
#[macro_export]
macro_rules! check_orphaned_and_set {
($struct_self: ident, $field: ident, $value: expr) => {
// TODO: This seems like it could be used instead, but raises an error
// ensure!(!$struct_self.orphaned, utils::NESTED_STRUCT_ERR);
// $struct_self.$field = $value;
// Ok(())
if !$struct_self.orphaned {
$struct_self.$field = $value;
anyhow::Ok(())
} else {
bail!(utils::NESTED_STRUCT_ERR)
}
};
}
#[macro_export]
/// Generates a String similar to output of `dbg` but without printing
macro_rules! format_dbg {
($dbg_expr:expr) => {
format!(
"[{}:{}] {}: {:?}",
file!(),
line!(),
stringify!($dbg_expr),
$dbg_expr
)
};
() => {
format!("[{}:{}]", file!(), line!())
};
}