use crate::testenv::TestEnv; macro_rules! request { ($env:expr, $fn:ident ($($arg:expr),* $(,)?)) => {{ match request!(@call, $env, $fn, $($arg),*) { Ok(ok) => { $env.log(format!("> {ok:?}")); ok }, Err(err) => { $env.log(format!(">! {err:?}")); panic!("Server request failed."); } } }}; (@expect_error $reason:literal $env:expr, $fn:ident ($($arg:expr),* $(,)?)) => {{ match request!(@call, $env, $fn, $($arg),*) { Err(err) => { $env.log(format!("> `{err}` ({})", $reason)); err }, Ok(ok) => { $env.log(format!(">? {ok:?}")); panic!("Server request succeeded, but should fail."); } } }}; (@call, $env:expr, $fn:ident, $($arg:expr),*) => {{ $env.log( format!( "< {}({})", stringify!($fn), request!(@format, $fn, $($arg),*) ) ); $fn(&$env.config, $($arg),*).await }}; (@format, $fn:ident, $($arg:expr),*) => {{ use std::fmt::Write; let mut base = String::new(); $( write!(base, "{:?}, ", $arg) .expect("In memory write"); )* base.trim().trim_end_matches(',').to_owned() }}; } pub(crate) use request; impl TestEnv { pub(crate) fn log(&self, message: A) where A: AsRef, { eprintln!("{}: {}", self.name, message.as_ref()); } }