use crate::{
Api, AsGear,
config::GearConfig,
gear::{self},
result::Result,
};
use subxt::{OnlineClient, blocks::ExtrinsicEvents as TxEvents, tx::TxInBlock};
impl Api {
pub async fn capture_dispatch_info(
&self,
tx: &TxInBlock<GearConfig, OnlineClient<GearConfig>>,
) -> Result<TxEvents<GearConfig>> {
let events = tx.fetch_events().await?;
for ev in events.iter() {
if let gear::Event::System(system_event) = ev?.as_gear()? {
let extrinsic_result = match system_event {
gear::system::Event::ExtrinsicFailed {
dispatch_error,
dispatch_info,
} => Some((dispatch_info, Err(self.decode_error(dispatch_error)))),
gear::system::Event::ExtrinsicSuccess { dispatch_info } => {
Some((dispatch_info, Ok(())))
}
_ => None,
};
if let Some((dispatch_info, result)) = extrinsic_result {
log::info!(" Weight cost: {:?}", dispatch_info.weight);
result?;
break;
}
}
}
Ok(events)
}
}