1use multiaddr::Multiaddr;
2use std::error::Error;
3use tofuri_block::BlockA;
4use tofuri_core::*;
5use tofuri_rpc_core::Data;
6use tofuri_rpc_core::Request;
7use tofuri_stake::StakeA;
8use tofuri_stake::StakeB;
9use tofuri_sync::Sync;
10use tofuri_transaction::TransactionA;
11use tofuri_transaction::TransactionB;
12use tokio::io::AsyncReadExt;
13use tokio::io::AsyncWriteExt;
14use tokio::net::TcpStream;
15async fn r(data: Data, addr: &str, vec: Option<Vec<u8>>) -> Result<Vec<u8>, Box<dyn Error>> {
16 let mut stream = TcpStream::connect(addr).await?;
17 let request = Request {
18 data,
19 vec: vec.unwrap_or(vec![]),
20 };
21 stream.write_all(&bincode::serialize(&request)?).await?;
22 let mut buf = [0; 1024];
23 let bytes = stream.read(&mut buf).await?;
24 let vec = buf[..bytes].to_vec();
25 Ok(vec)
26}
27pub async fn balance(addr: &str, address_bytes: &AddressBytes) -> Result<u128, Box<dyn Error>> {
28 Ok(bincode::deserialize(&r(Data::Balance, addr, Some(bincode::serialize(address_bytes)?)).await?)?)
29}
30pub async fn balance_pending_min(addr: &str, address_bytes: &AddressBytes) -> Result<u128, Box<dyn Error>> {
31 Ok(bincode::deserialize(
32 &r(Data::BalancePendingMin, addr, Some(bincode::serialize(address_bytes)?)).await?,
33 )?)
34}
35pub async fn balance_pending_max(addr: &str, address_bytes: &AddressBytes) -> Result<u128, Box<dyn Error>> {
36 Ok(bincode::deserialize(
37 &r(Data::BalancePendingMax, addr, Some(bincode::serialize(address_bytes)?)).await?,
38 )?)
39}
40pub async fn staked(addr: &str, address_bytes: &AddressBytes) -> Result<u128, Box<dyn Error>> {
41 Ok(bincode::deserialize(&r(Data::Staked, addr, Some(bincode::serialize(address_bytes)?)).await?)?)
42}
43pub async fn staked_pending_min(addr: &str, address_bytes: &AddressBytes) -> Result<u128, Box<dyn Error>> {
44 Ok(bincode::deserialize(
45 &r(Data::StakedPendingMin, addr, Some(bincode::serialize(address_bytes)?)).await?,
46 )?)
47}
48pub async fn staked_pending_max(addr: &str, address_bytes: &AddressBytes) -> Result<u128, Box<dyn Error>> {
49 Ok(bincode::deserialize(
50 &r(Data::StakedPendingMax, addr, Some(bincode::serialize(address_bytes)?)).await?,
51 )?)
52}
53pub async fn height(addr: &str) -> Result<usize, Box<dyn Error>> {
54 Ok(bincode::deserialize(&r(Data::Height, addr, None).await?)?)
55}
56pub async fn height_by_hash(addr: &str, hash: &Hash) -> Result<usize, Box<dyn Error>> {
57 Ok(bincode::deserialize(&r(Data::HeightByHash, addr, Some(bincode::serialize(hash)?)).await?)?)
58}
59pub async fn block_latest(addr: &str) -> Result<BlockA, Box<dyn Error>> {
60 Ok(bincode::deserialize(&r(Data::BlockLatest, addr, None).await?)?)
61}
62pub async fn hash_by_height(addr: &str, height: &usize) -> Result<Hash, Box<dyn Error>> {
63 Ok(bincode::deserialize(&r(Data::HashByHeight, addr, Some(bincode::serialize(height)?)).await?)?)
64}
65pub async fn block_by_hash(addr: &str, hash: &Hash) -> Result<BlockA, Box<dyn Error>> {
66 Ok(bincode::deserialize(&r(Data::BlockByHash, addr, Some(bincode::serialize(hash)?)).await?)?)
67}
68pub async fn transaction_by_hash(addr: &str, hash: &Hash) -> Result<TransactionA, Box<dyn Error>> {
69 Ok(bincode::deserialize(&r(Data::TransactionByHash, addr, Some(bincode::serialize(hash)?)).await?)?)
70}
71pub async fn stake_by_hash(addr: &str, hash: &Hash) -> Result<StakeA, Box<dyn Error>> {
72 Ok(bincode::deserialize(&r(Data::StakeByHash, addr, Some(bincode::serialize(hash)?)).await?)?)
73}
74pub async fn peers(addr: &str) -> Result<Vec<Multiaddr>, Box<dyn Error>> {
75 Ok(bincode::deserialize(&r(Data::Peers, addr, None).await?)?)
76}
77pub async fn peer(addr: &str, multiaddr: &Multiaddr) -> Result<(), Box<dyn Error>> {
78 Ok(bincode::deserialize(&r(Data::Peer, addr, Some(bincode::serialize(multiaddr)?)).await?)?)
79}
80pub async fn transaction(addr: &str, transaction_b: &TransactionB) -> Result<String, Box<dyn Error>> {
81 Ok(bincode::deserialize(
82 &r(Data::Transaction, addr, Some(bincode::serialize(transaction_b)?)).await?,
83 )?)
84}
85pub async fn stake(addr: &str, stake_b: &StakeB) -> Result<String, Box<dyn Error>> {
86 Ok(bincode::deserialize(&r(Data::Stake, addr, Some(bincode::serialize(stake_b)?)).await?)?)
87}
88pub async fn cargo_pkg_name(addr: &str) -> Result<String, Box<dyn Error>> {
89 Ok(bincode::deserialize(&r(Data::CargoPkgName, addr, None).await?)?)
90}
91pub async fn cargo_pkg_version(addr: &str) -> Result<String, Box<dyn Error>> {
92 Ok(bincode::deserialize(&r(Data::CargoPkgVersion, addr, None).await?)?)
93}
94pub async fn cargo_pkg_repository(addr: &str) -> Result<String, Box<dyn Error>> {
95 Ok(bincode::deserialize(&r(Data::CargoPkgRepository, addr, None).await?)?)
96}
97pub async fn git_hash(addr: &str) -> Result<String, Box<dyn Error>> {
98 Ok(bincode::deserialize(&r(Data::GitHash, addr, None).await?)?)
99}
100pub async fn address(addr: &str) -> Result<AddressBytes, Box<dyn Error>> {
101 Ok(bincode::deserialize(&r(Data::Address, addr, None).await?)?)
102}
103pub async fn ticks(addr: &str) -> Result<usize, Box<dyn Error>> {
104 Ok(bincode::deserialize(&r(Data::Ticks, addr, None).await?)?)
105}
106pub async fn lag(addr: &str) -> Result<f64, Box<dyn Error>> {
107 Ok(bincode::deserialize(&r(Data::Lag, addr, None).await?)?)
108}
109pub async fn time(addr: &str) -> Result<i64, Box<dyn Error>> {
110 Ok(bincode::deserialize(&r(Data::Time, addr, None).await?)?)
111}
112pub async fn tree_size(addr: &str) -> Result<usize, Box<dyn Error>> {
113 Ok(bincode::deserialize(&r(Data::TreeSize, addr, None).await?)?)
114}
115pub async fn sync(addr: &str) -> Result<Sync, Box<dyn Error>> {
116 Ok(bincode::deserialize(&r(Data::Sync, addr, None).await?)?)
117}
118pub async fn random_queue(addr: &str) -> Result<Vec<AddressBytes>, Box<dyn Error>> {
119 Ok(bincode::deserialize(&r(Data::RandomQueue, addr, None).await?)?)
120}
121pub async fn dynamic_hashes(addr: &str) -> Result<usize, Box<dyn Error>> {
122 Ok(bincode::deserialize(&r(Data::DynamicHashes, addr, None).await?)?)
123}
124pub async fn dynamic_latest_hashes(addr: &str) -> Result<Vec<Hash>, Box<dyn Error>> {
125 Ok(bincode::deserialize(&r(Data::DynamicLatestHashes, addr, None).await?)?)
126}
127pub async fn dynamic_stakers(addr: &str) -> Result<usize, Box<dyn Error>> {
128 Ok(bincode::deserialize(&r(Data::DynamicStakers, addr, None).await?)?)
129}
130pub async fn trusted_hashes(addr: &str) -> Result<usize, Box<dyn Error>> {
131 Ok(bincode::deserialize(&r(Data::TrustedHashes, addr, None).await?)?)
132}
133pub async fn trusted_latest_hashes(addr: &str) -> Result<Vec<Hash>, Box<dyn Error>> {
134 Ok(bincode::deserialize(&r(Data::TrustedLatestHashes, addr, None).await?)?)
135}
136pub async fn trusted_stakers(addr: &str) -> Result<usize, Box<dyn Error>> {
137 Ok(bincode::deserialize(&r(Data::TrustedStakers, addr, None).await?)?)
138}