summer_ipfs_client/
cat.rs

1use crate::IpfsApi;
2
3use std::io::Read;
4
5use reqwest;
6use failure::Error;
7
8impl IpfsApi {
9    pub fn cat(&self, hash: &str) -> Result<impl Iterator<Item=u8>, Error> {
10        let mut url = self.get_url()?;
11        url.set_path("api/v0/cat");
12        url.query_pairs_mut()
13            .append_pair("arg", hash);
14        let resp = reqwest::get(url)?;
15        Ok(resp.bytes().filter(|x|x.is_ok()).map(|x|x.unwrap()))
16    }
17}
18
19#[cfg(test)]
20mod tests {
21    use super::*;
22
23    #[test]
24    fn test_cat_bytes() {
25        let api = IpfsApi::new("127.0.0.1", 5001);
26
27        // Hello world object
28        let bytes = api.cat("QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u").unwrap();
29
30        assert_eq!("Hello World".as_bytes().to_vec(), bytes.collect::<Vec<u8>>());
31    }
32
33    #[test]
34    fn test_cat_string() {
35        let api = IpfsApi::new("127.0.0.1", 5001);
36
37        let bytes = api.cat("QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u").unwrap();
38        let string = String::from_utf8(bytes.collect()).unwrap();
39
40        assert_eq!("Hello World", &string);
41    }
42}