bitbank_api/stream/
transactions.rs

1use super::*;
2
3pub use crate::public::transactions::Transaction;
4
5#[derive(TypedBuilder)]
6pub struct Params {
7    pair: Pair,
8}
9
10#[derive(Deserialize, Debug)]
11struct Transactions {
12    transactions: Vec<Transaction>,
13}
14
15pub async fn connect(
16    params: Params,
17) -> anyhow::Result<impl tokio_stream::Stream<Item = Transaction>> {
18    use futures::stream::{self, StreamExt};
19    let pair = params.pair;
20    let room_id = format!("transactions_{pair}");
21    let st = do_connect::<Transactions>(&room_id).await?;
22    let st = st.flat_map(|x| stream::iter(x.transactions));
23    Ok(st)
24}
25
26#[cfg(test)]
27mod tests {
28    use super::*;
29
30    #[tokio::test]
31    async fn test() -> anyhow::Result<()> {
32        use futures_util::{pin_mut, StreamExt};
33
34        let params = Params::builder().pair(Pair(XRP, JPY)).build();
35        let st = connect(params).await?;
36        pin_mut!(st);
37        while let Some(x) = st.next().await {
38            break;
39        }
40        Ok(())
41    }
42}