zingolib 0.0.1

Zingo backend library.
Documentation
/// Note that do_addresses returns an array, each element is a JSON representation
/// of a UA.  Legacy addresses can be extracted from the receivers, per:
/// <https://zips.z.cash/zip-0316>
#[macro_export]
macro_rules! get_base_address_macro {
    ($client:expr, $address_protocol:expr) => {
        match $address_protocol {
            "unified" => $client
                .do_addresses($crate::lightclient::describe::UAReceivers::All)
                .await[0]["address"]
                .take()
                .to_string(),
            "sapling" => $client
                .do_addresses($crate::lightclient::describe::UAReceivers::All)
                .await[0]["receivers"]["sapling"]
                .clone()
                .to_string(),
            "transparent" => $client
                .do_addresses($crate::lightclient::describe::UAReceivers::All)
                .await[0]["receivers"]["transparent"]
                .clone()
                .to_string(),
            _ => "ERROR".to_string(),
        }
    };
}

/// First check that each pools' balance matches an expectation
/// then check that the overall balance as calculated by
/// summing the amounts listed in tx_summaries matches the
/// sum of the balances.
#[macro_export]
macro_rules! check_client_balances {
    ($client:ident, o: $orchard:tt s: $sapling:tt t: $transparent:tt) => {
        use zingolib::wallet::data::summaries::TransactionSummaryInterface as _;

        let balance = $client.do_balance().await;
        assert_eq!(
            balance.orchard_balance.unwrap(),
            $orchard,
            "\no_balance: {} expectation: {} ",
            balance.orchard_balance.unwrap(),
            $orchard
        );
        assert_eq!(
            balance.sapling_balance.unwrap(),
            $sapling,
            "\ns_balance: {} expectation: {} ",
            balance.sapling_balance.unwrap(),
            $sapling
        );
        assert_eq!(
            balance.confirmed_transparent_balance.unwrap(),
            $transparent,
            "\nt_balance: {} expectation: {} ",
            balance.confirmed_transparent_balance.unwrap(),
            $transparent
        );
        let summaries = $client.transaction_summaries().await.unwrap();
        let summaries_balance = summaries
            .iter()
            .map(|summary| {
                summary
                    .balance_delta()
                    .unwrap_or_else(|| panic!("field not correctly populated"))
            })
            .sum::<i64>();
        assert_eq!(
            (balance.orchard_balance.unwrap()
                + balance.sapling_balance.unwrap()
                + balance.confirmed_transparent_balance.unwrap()) as i64,
            summaries_balance,
            "transaction_summaries: {}",
            summaries
        );
    };
}