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
#[derive(Clone, Debug)]
pub struct Transaction {
    pub tag: String,
    pub payload: Vec<u8>,
}

impl Transaction {
    pub fn new<K: Into<String>>(tag: K, payload: Vec<u8>) -> Transaction {
        Transaction {
            tag: tag.into(),
            payload: payload,
        }
    }

    pub fn new_json<K: Into<String>, T: ::serde::Serialize>(tag: K, payload: T) -> Transaction {
        Transaction {
            tag: tag.into(),
            payload: ::serde_json::to_vec(&payload).unwrap(),
        }
    }

    pub fn send(self) {
        let tag = self.tag.as_bytes();
        let payload = self.payload.as_slice();

        unsafe { ::sys::_send_transaction(tag.as_ptr(), tag.len(), payload.as_ptr(), payload.len()) };
    }
}