/ fedimint-server / src / consensus / debug_fmt.rs
debug_fmt.rs
 1  use std::fmt;
 2  
 3  use crate::ConsensusItem;
 4  
 5  /// A newtype for a nice [`fmt::Debug`] of a [`ConsensusItem`]
 6  pub struct FmtDbgConsensusItem<'ci>(pub &'ci ConsensusItem);
 7  
 8  impl<'ci> fmt::Debug for FmtDbgConsensusItem<'ci> {
 9      fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
10          match self.0 {
11              ConsensusItem::Module(mci) => {
12                  f.write_fmt(format_args!(
13                      "Module CI: module={} ci={}",
14                      mci.module_instance_id(),
15                      mci
16                  ))?;
17              }
18              ConsensusItem::Transaction(tx) => {
19                  f.write_fmt(format_args!(
20                      "Transaction txid={}, inputs_num={}, outputs_num={}",
21                      tx.tx_hash(),
22                      tx.inputs.len(),
23                      tx.outputs.len(),
24                  ))?;
25                  // TODO: This is kind of lengthy, and maybe could be conditionally enabled
26                  // via an env var or something.
27                  for input in tx.inputs.iter() {
28                      // TODO: add pretty print fn to interface
29                      f.write_fmt(format_args!("\n    Input: {input}"))?;
30                  }
31                  for output in tx.outputs.iter() {
32                      f.write_fmt(format_args!("\n    Output: {output}")).unwrap();
33                  }
34              }
35              ConsensusItem::Default { variant, .. } => {
36                  f.write_fmt(format_args!("Unknown CI variant: {variant}"))?;
37              }
38          }
39          Ok(())
40      }
41  }