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 super::{FragmentCheck, FragmentsCheck};
use crate::{jcli::JCli, jormungandr::JormungandrProcess};

pub struct FragmentSender<'a> {
    jcli: JCli,
    jormungandr: &'a JormungandrProcess,
}

impl<'a> FragmentSender<'a> {
    pub fn new(jcli: JCli, jormungandr: &'a JormungandrProcess) -> Self {
        Self { jcli, jormungandr }
    }

    pub fn send(self, transaction: &'a str) -> FragmentCheck {
        let summary = self
            .jcli
            .rest()
            .v0()
            .message()
            .post(transaction, self.jormungandr.rest_uri());

        let id = if summary.accepted.len() == 1 {
            summary.accepted[0]
        } else if summary.rejected.len() == 1 {
            summary.rejected[0].id
        } else {
            panic!("Single transaction was sent but multiple or no processing results found");
        };

        FragmentCheck::new(self.jcli, self.jormungandr, id, summary)
    }

    pub fn send_many(self, transactions: &'a [String]) -> FragmentsCheck {
        for tx in transactions {
            self.jcli
                .rest()
                .v0()
                .message()
                .post(tx, self.jormungandr.rest_uri());
        }
        FragmentsCheck::new(self.jcli, self.jormungandr)
    }
}