-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpool.rs
More file actions
43 lines (40 loc) · 1.7 KB
/
pool.rs
File metadata and controls
43 lines (40 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use std::collections::BTreeMap;
use dioxus::prelude::Signal;
use crate::metamask::uniswap_v2::{V2PairInfo as PoolInfo};
use crate::vanillaswap::v2::is_zero_or_empty;
pub mod liquidity;
pub fn use_filtered_pairs(
wrapped_native: String,
pairs: Signal<Vec<PoolInfo>>,
balances: Signal<BTreeMap<String, String>>,
show_zero_liq: Signal<bool>,
show_balanced: Signal<bool>,
) -> Vec<PoolInfo> {
let balances = balances();
pairs()
.iter()
.filter(|p| {
// Zero liquidity filter
(show_zero_liq()
|| (!is_zero_or_empty(p.reserve0.as_deref())
&& !is_zero_or_empty(p.reserve1.as_deref())))
&&
// Balanced filter
(!show_balanced()
|| !is_zero_or_empty(balances.get(&p.pair_address).map(String::as_str))
|| (
(!is_zero_or_empty(balances.get(&p.token0).map(String::as_str))
|| (p.token0.to_lowercase() == wrapped_native
&& !is_zero_or_empty(balances.get("native").map(String::as_str))))
&&
(!is_zero_or_empty(balances.get(&p.token1).map(String::as_str))
|| (p.token1.to_lowercase() == wrapped_native
&& !is_zero_or_empty(balances.get("native").map(String::as_str))))
))
})
.cloned()
.collect::<Vec<PoolInfo>>()
}
pub fn get_pool(address_a: &String, address_b: &String, pools: &Vec<PoolInfo>) -> Option<PoolInfo>{
pools.iter().find(|p| (p.token0 == *address_a && p.token1 == *address_b) || (p.token1 == *address_a && p.token0 == *address_b)).cloned()
}