summer_ipfs_client/
object.rs

1use 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}