From 534b95b6acba505cdd963baaefa61c49bc6e4d0b Mon Sep 17 00:00:00 2001 From: Ferris Tseng Date: Sun, 22 Dec 2019 23:16:07 -0500 Subject: implementing a bunch of methods --- ipfs-api/src/client.rs | 247 +++++++++++++++++++++++++------------------------ 1 file changed, 127 insertions(+), 120 deletions(-) diff --git a/ipfs-api/src/client.rs b/ipfs-api/src/client.rs index 7ddc205..afe39a4 100644 --- a/ipfs-api/src/client.rs +++ b/ipfs-api/src/client.rs @@ -16,9 +16,7 @@ use actix_http::{encoding, Payload, PayloadStream}; #[cfg(feature = "actix")] use actix_multipart::client::multipart; use bytes::Bytes; -use futures::{ - future, Future, FutureExt, Stream, TryFutureExt, TryStreamExt, -}; +use futures::{future, Future, FutureExt, Stream, TryFutureExt, TryStreamExt}; use http::{ uri::{InvalidUri, Uri}, StatusCode, @@ -487,7 +485,7 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn add(&self, data: R) -> impl Future> + pub async fn add(&self, data: R) -> Result where R: 'static + Read + Send + Sync, { @@ -495,7 +493,7 @@ impl IpfsClient { form.add_reader("path", data); - self.request(request::Add, Some(form)) + self.request(request::Add, Some(form)).await } /* @@ -595,11 +593,11 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn bitswap_ledger( + pub async fn bitswap_ledger( &self, peer: &str, - ) -> impl Future> { - self.request(request::BitswapLedger { peer }, None) + ) -> Result { + self.request(request::BitswapLedger { peer }, None).await } /// Triggers a reprovide. @@ -618,10 +616,8 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn bitswap_reprovide( - &self, - ) -> impl Future> { - self.request_empty(request::BitswapReprovide, None) + pub async fn bitswap_reprovide(&self) -> Result { + self.request_empty(request::BitswapReprovide, None).await } /// Returns some stats about the bitswap agent. @@ -640,13 +636,10 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn bitswap_stat( - &self, - ) -> impl Future> { - self.request(request::BitswapStat, None) + pub async fn bitswap_stat(&self) -> Result { + self.request(request::BitswapStat, None).await } - /* /// Remove a given block from your wantlist. /// /// # Examples @@ -663,8 +656,12 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn bitswap_unwant(&self, key: &str) -> AsyncResponse { - self.request_empty(&request::BitswapUnwant { key }, None) + pub async fn bitswap_unwant( + &self, + key: &str, + ) -> Result { + self.request_empty(request::BitswapUnwant { key }, None) + .await } /// Shows blocks on the wantlist for you or the specified peer. @@ -683,11 +680,11 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn bitswap_wantlist( + pub async fn bitswap_wantlist( &self, peer: Option<&str>, - ) -> AsyncResponse { - self.request(&request::BitswapWantlist { peer }, None) + ) -> Result { + self.request(request::BitswapWantlist { peer }, None).await } /// Gets a raw IPFS block. @@ -709,10 +706,9 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn block_get(&self, hash: &str) -> AsyncStreamResponse { - self.request_stream_bytes(&request::BlockGet { hash }, None) + pub fn block_get(&self, hash: &str) -> impl Stream> { + self.request_stream_bytes(request::BlockGet { hash }, None) } - */ /// Store input as an IPFS block. /// @@ -732,10 +728,7 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn block_put( - &self, - data: R, - ) -> impl Future> + pub async fn block_put(&self, data: R) -> Result where R: 'static + Read + Send + Sync, { @@ -743,10 +736,9 @@ impl IpfsClient { form.add_reader("data", data); - self.request(request::BlockPut, Some(form)) + self.request(request::BlockPut, Some(form)).await } - /* /// Removes an IPFS block. /// /// # Examples @@ -763,8 +755,8 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn block_rm(&self, hash: &str) -> AsyncResponse { - self.request(&request::BlockRm { hash }, None) + pub async fn block_rm(&self, hash: &str) -> Result { + self.request(request::BlockRm { hash }, None).await } /// Prints information about a raw IPFS block. @@ -783,10 +775,9 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn block_stat(&self, hash: &str) -> AsyncResponse { - self.request(&request::BlockStat { hash }, None) + pub async fn block_stat(&self, hash: &str) -> Result { + self.request(request::BlockStat { hash }, None).await } - */ /// Add default peers to the bootstrap list. /// @@ -804,10 +795,10 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn bootstrap_add_default( + pub async fn bootstrap_add_default( &self, - ) -> impl Future> { - self.request(request::BootstrapAddDefault, None) + ) -> Result { + self.request(request::BootstrapAddDefault, None).await } /// Lists peers in bootstrap list. @@ -826,10 +817,8 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn bootstrap_list( - &self, - ) -> impl Future> { - self.request(request::BootstrapList, None) + pub async fn bootstrap_list(&self) -> Result { + self.request(request::BootstrapList, None).await } /// Removes all peers in bootstrap list. @@ -848,13 +837,10 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn bootstrap_rm_all( - &self, - ) -> impl Future> { - self.request(request::BootstrapRmAll, None) + pub async fn bootstrap_rm_all(&self) -> Result { + self.request(request::BootstrapRmAll, None).await } - /* /// Returns the contents of an Ipfs object. /// /// # Examples @@ -875,7 +861,7 @@ impl IpfsClient { /// #[inline] pub fn cat(&self, path: &str) -> AsyncStreamResponse { - self.request_stream_bytes(&request::Cat { path }, None) + self.request_stream_bytes(request::Cat { path }, None) } /// List available commands that the server accepts. @@ -892,8 +878,8 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn commands(&self) -> AsyncResponse { - self.request(&request::Commands, None) + pub async fn commands(&self) -> Result { + self.request(request::Commands, None).await } /// Opens the config file for editing (on the server). @@ -910,8 +896,8 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn config_edit(&self) -> AsyncResponse { - self.request(&request::ConfigEdit, None) + pub async fn config_edit(&self) -> Result { + self.request(request::ConfigEdit, None).await } /// Replace the config file. @@ -930,15 +916,15 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn config_replace(&self, data: R) -> AsyncResponse + pub async fn config_replace(&self, data: R) -> Result where - R: 'static + Read + Send, + R: 'static + Read + Send + Sync, { let mut form = multipart::Form::default(); form.add_reader("file", data); - self.request_empty(&request::ConfigReplace, Some(form)) + self.request_empty(request::ConfigReplace, Some(form)).await } /// Show the current config of the server. @@ -957,8 +943,8 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn config_show(&self) -> AsyncResponse { - self.request_string(&request::ConfigShow, None) + pub async fn config_show(&self) -> Result { + self.request_string(request::ConfigShow, None).await } /// Returns information about a dag node in Ipfs. @@ -975,8 +961,8 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn dag_get(&self, path: &str) -> AsyncResponse { - self.request(&request::DagGet { path }, None) + pub async fn dag_get(&self, path: &str) -> Result { + self.request(request::DagGet { path }, None).await } // TODO /dag routes are experimental, and there isn't a whole lot of @@ -1016,7 +1002,7 @@ impl IpfsClient { /// #[inline] pub fn dht_findpeer(&self, peer: &str) -> AsyncStreamResponse { - self.request_stream_json(&request::DhtFindPeer { peer }, None) + self.request_stream_json(request::DhtFindPeer { peer }, None) } /// Find peers in the DHT that can provide a specific value given a key. @@ -1037,7 +1023,7 @@ impl IpfsClient { /// #[inline] pub fn dht_findprovs(&self, key: &str) -> AsyncStreamResponse { - self.request_stream_json(&request::DhtFindProvs { key }, None) + self.request_stream_json(request::DhtFindProvs { key }, None) } /// Query the DHT for a given key. @@ -1058,7 +1044,7 @@ impl IpfsClient { /// #[inline] pub fn dht_get(&self, key: &str) -> AsyncStreamResponse { - self.request_stream_json(&request::DhtGet { key }, None) + self.request_stream_json(request::DhtGet { key }, None) } /// Announce to the network that you are providing a given value. @@ -1079,7 +1065,7 @@ impl IpfsClient { /// #[inline] pub fn dht_provide(&self, key: &str) -> AsyncStreamResponse { - self.request_stream_json(&request::DhtProvide { key }, None) + self.request_stream_json(request::DhtProvide { key }, None) } /// Write a key/value pair to the DHT. @@ -1099,7 +1085,7 @@ impl IpfsClient { /// #[inline] pub fn dht_put(&self, key: &str, value: &str) -> AsyncStreamResponse { - self.request_stream_json(&request::DhtPut { key, value }, None) + self.request_stream_json(request::DhtPut { key, value }, None) } /// Find the closest peer given the peer ID by querying the DHT. @@ -1120,7 +1106,7 @@ impl IpfsClient { /// #[inline] pub fn dht_query(&self, peer: &str) -> AsyncStreamResponse { - self.request_stream_json(&request::DhtQuery { peer }, None) + self.request_stream_json(request::DhtQuery { peer }, None) } /// Clear inactive requests from the log. @@ -1137,8 +1123,8 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn diag_cmds_clear(&self) -> AsyncResponse { - self.request_empty(&request::DiagCmdsClear, None) + pub async fn diag_cmds_clear(&self) -> Result { + self.request_empty(request::DiagCmdsClear, None).await } /// Set how long to keep inactive requests in the log. @@ -1155,11 +1141,12 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn diag_cmds_set_time( + pub async fn diag_cmds_set_time( &self, time: &str, - ) -> AsyncResponse { - self.request_empty(&request::DiagCmdsSetTime { time }, None) + ) -> Result { + self.request_empty(request::DiagCmdsSetTime { time }, None) + .await } /// Print system diagnostic information. @@ -1180,8 +1167,8 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn diag_sys(&self) -> AsyncResponse { - self.request_string(&request::DiagSys, None) + pub async fn diag_sys(&self) -> Result { + self.request_string(request::DiagSys, None).await } /// Resolve DNS link. @@ -1198,8 +1185,8 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn dns(&self, link: &str, recursive: bool) -> AsyncResponse { - self.request(&request::Dns { link, recursive }, None) + pub async fn dns(&self, link: &str, recursive: bool) -> Result { + self.request(request::Dns { link, recursive }, None).await } /// List directory for Unix filesystem objects. @@ -1216,8 +1203,8 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn file_ls(&self, path: &str) -> AsyncResponse { - self.request(&request::FileLs { path }, None) + pub async fn file_ls(&self, path: &str) -> Result { + self.request(request::FileLs { path }, None).await } /// Copy files into MFS. @@ -1234,8 +1221,13 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn files_cp(&self, path: &str, dest: &str) -> AsyncResponse { - self.request_empty(&request::FilesCp { path, dest }, None) + pub async fn files_cp( + &self, + path: &str, + dest: &str, + ) -> Result { + self.request_empty(request::FilesCp { path, dest }, None) + .await } /// Flush a path's data to disk. @@ -1253,8 +1245,11 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn files_flush(&self, path: Option<&str>) -> AsyncResponse { - self.request_empty(&request::FilesFlush { path }, None) + pub async fn files_flush( + &self, + path: Option<&str>, + ) -> Result { + self.request_empty(request::FilesFlush { path }, None).await } /// List directories in MFS. @@ -1272,8 +1267,8 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn files_ls(&self, path: Option<&str>) -> AsyncResponse { - self.request(&request::FilesLs { path }, None) + pub async fn files_ls(&self, path: Option<&str>) -> Result { + self.request(request::FilesLs { path }, None).await } /// Make directories in MFS. @@ -1291,12 +1286,13 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn files_mkdir( + pub async fn files_mkdir( &self, path: &str, parents: bool, - ) -> AsyncResponse { - self.request_empty(&request::FilesMkdir { path, parents }, None) + ) -> Result { + self.request_empty(request::FilesMkdir { path, parents }, None) + .await } /// Copy files into MFS. @@ -1313,8 +1309,13 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn files_mv(&self, path: &str, dest: &str) -> AsyncResponse { - self.request_empty(&request::FilesMv { path, dest }, None) + pub async fn files_mv( + &self, + path: &str, + dest: &str, + ) -> Result { + self.request_empty(request::FilesMv { path, dest }, None) + .await } /// Read a file in MFS. @@ -1332,7 +1333,7 @@ impl IpfsClient { /// #[inline] pub fn files_read(&self, path: &str) -> AsyncStreamResponse { - self.request_stream_bytes(&request::FilesRead { path }, None) + self.request_stream_bytes(request::FilesRead { path }, None) } /// Remove a file in MFS. @@ -1350,12 +1351,13 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn files_rm( + pub async fn files_rm( &self, path: &str, recursive: bool, - ) -> AsyncResponse { - self.request_empty(&request::FilesRm { path, recursive }, None) + ) -> Result { + self.request_empty(request::FilesRm { path, recursive }, None) + .await } /// Display a file's status in MDFS. @@ -1372,8 +1374,8 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn files_stat(&self, path: &str) -> AsyncResponse { - self.request(&request::FilesStat { path }, None) + pub async fn files_stat(&self, path: &str) -> Result { + self.request(request::FilesStat { path }, None).await } /// Write to a mutable file in the filesystem. @@ -1392,28 +1394,29 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn files_write( + pub async fn files_write( &self, path: &str, create: bool, truncate: bool, data: R, - ) -> AsyncResponse + ) -> Result where - R: 'static + Read + Send, + R: 'static + Read + Send + Sync, { let mut form = multipart::Form::default(); form.add_reader("data", data); self.request_empty( - &request::FilesWrite { + request::FilesWrite { path, create, truncate, }, Some(form), ) + .await } /// List blocks that are both in the filestore and standard block storage. @@ -1431,7 +1434,7 @@ impl IpfsClient { /// #[inline] pub fn filestore_dups(&self) -> AsyncStreamResponse { - self.request_stream_json(&request::FilestoreDups, None) + self.request_stream_json(request::FilestoreDups, None) } /// List objects in filestore. @@ -1452,7 +1455,7 @@ impl IpfsClient { &self, cid: Option<&str>, ) -> AsyncStreamResponse { - self.request_stream_json(&request::FilestoreLs { cid }, None) + self.request_stream_json(request::FilestoreLs { cid }, None) } /// Verify objects in filestore. @@ -1473,7 +1476,7 @@ impl IpfsClient { &self, cid: Option<&str>, ) -> AsyncStreamResponse { - self.request_stream_json(&request::FilestoreVerify { cid }, None) + self.request_stream_json(request::FilestoreVerify { cid }, None) } /// Download Ipfs object. @@ -1491,7 +1494,7 @@ impl IpfsClient { /// #[inline] pub fn get(&self, path: &str) -> AsyncStreamResponse { - self.request_stream_bytes(&request::Get { path }, None) + self.request_stream_bytes(request::Get { path }, None) } /// Returns information about a peer. @@ -1511,8 +1514,8 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn id(&self, peer: Option<&str>) -> AsyncResponse { - self.request(&request::Id { peer }, None) + pub async fn id(&self, peer: Option<&str>) -> Result { + self.request(request::Id { peer }, None).await } /// Create a new keypair. @@ -1529,13 +1532,14 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn key_gen( + pub async fn key_gen( &self, name: &str, kind: request::KeyType, size: i32, - ) -> AsyncResponse { - self.request(&request::KeyGen { name, kind, size }, None) + ) -> Result { + self.request(request::KeyGen { name, kind, size }, None) + .await } /// List all local keypairs. @@ -1552,8 +1556,8 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn key_list(&self) -> AsyncResponse { - self.request(&request::KeyList, None) + pub async fn key_list(&self) -> Result { + self.request(request::KeyList, None).await } /// Rename a keypair. @@ -1570,13 +1574,14 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn key_rename( + pub async fn key_rename( &self, name: &str, new: &str, force: bool, - ) -> AsyncResponse { - self.request(&request::KeyRename { name, new, force }, None) + ) -> Result { + self.request(request::KeyRename { name, new, force }, None) + .await } /// Remove a keypair. @@ -1593,8 +1598,8 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn key_rm(&self, name: &str) -> AsyncResponse { - self.request(&request::KeyRm { name }, None) + pub async fn key_rm(&self, name: &str) -> Result { + self.request(request::KeyRm { name }, None).await } /// Change the logging level for a logger. @@ -1615,12 +1620,13 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn log_level( + pub async fn log_level( &self, - logger: request::Logger, + logger: request::Logger<'_>, level: request::LoggingLevel, - ) -> AsyncResponse { - self.request(&request::LogLevel { logger, level }, None) + ) -> Result { + self.request(request::LogLevel { logger, level }, None) + .await } /// List all logging subsystems. @@ -1637,10 +1643,11 @@ impl IpfsClient { /// ``` /// #[inline] - pub fn log_ls(&self) -> AsyncResponse { - self.request(&request::LogLs, None) + pub async fn log_ls(&self) -> Result { + self.request(request::LogLs, None).await } + /* /// Read the event log. /// /// ```no_run -- cgit v1.2.3