redgold-schema 0.1.48

Decentralized Portfolio Contracts & Data Lake
Documentation
use crate::party::address_event::AddressEvent;
use crate::party::party_events::{OrderFulfillment, PartyEvents};
use crate::structs::Address;
use itertools::Itertools;

pub trait PartyEventSearch {
    fn find_swaps_for_addresses(&self, addrs: &Vec<Address>) -> Vec<(OrderFulfillment, AddressEvent, AddressEvent)>;
}

impl PartyEventSearch for PartyEvents {
    fn find_swaps_for_addresses(&self, addrs: &Vec<Address>) -> Vec<(OrderFulfillment, AddressEvent, AddressEvent)> {
        let addr_str = addrs.iter().map(|a| a.render_string().unwrap()).collect_vec();
        self.fulfillment_history
            .iter()
            .filter_map(|(of, ae1, ae2)| {
                if of.is_stake_withdrawal {
                    None
                }  else if ae1.other_swap_address().map(|a| addr_str.contains(&a)).unwrap_or(false)
                    || ae2.other_swap_address().map(|a| addr_str.contains(&a)).unwrap_or(false) {
                    Some((of.clone(), ae1.clone(), ae2.clone()))
                } else {
                    None
                }
            })
            .collect_vec()
    }
}