summer_ipfs_client/
object.rs1use crate::IpfsApi;
2
3use reqwest;
4use serde_json;
5use failure::Error;
6
7#[derive(Deserialize, Debug, PartialEq, Hash)]
8#[serde(rename_all="PascalCase")]
9pub struct ObjectStats {
10 hash: String,
11 num_links: u64,
12 block_size: u64,
13 links_size: u64,
14 data_size: u64,
15 cumulative_size: u64
16}
17
18impl ObjectStats {
19 pub fn hash(&self) -> String {
20 self.hash.clone()
21 }
22
23 pub fn num_links(&self) -> u64 {
24 self.num_links
25 }
26
27 pub fn block_size(&self) -> u64 {
28 self.block_size
29 }
30
31 pub fn links_size(&self) -> u64 {
32 self.links_size
33 }
34
35 pub fn cumulative_size(&self) -> u64 {
36 self.cumulative_size
37 }
38}
39
40impl IpfsApi {
41 pub fn object_stats(&self, hash: &str) -> Result<ObjectStats, Error> {
42 let url = format!("http://{}:{}/api/v0/object/stat?arg={}", self.server, self.port, hash);
43 let resp = reqwest::get(&url)?;
44 Ok(serde_json::from_reader(resp)?)
45 }
46}
47
48
49#[cfg(test)]
50mod tests {
51 use super::*;
52
53 #[test]
54 fn test_object_stats() {
55 let api = IpfsApi::new("127.0.0.1", 5001);
56 let stats = api.object_stats("QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u").unwrap();
57
58 assert_eq!(stats.hash(), "QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u".to_string());
59 assert_eq!(stats.cumulative_size(), 20);
60 }
61}