summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFerris Tseng <ferristseng@fastmail.fm>2018-01-23 20:17:55 -0500
committerFerris Tseng <ferristseng@fastmail.fm>2018-01-23 20:17:55 -0500
commita6c716e771ac041323fefcc1d04dc98490c38eff (patch)
treee7f2932cad9d9da7b407a3a4a8d3570efb434cd7
parentc44b62ded3dd1faed5de96ffdea2fc4b3d5d8b4f (diff)
add shutdown command
-rw-r--r--ipfs-api/src/client.rs20
-rw-r--r--ipfs-api/src/request/mod.rs2
-rw-r--r--ipfs-api/src/request/shutdown.rs17
-rw-r--r--ipfs-api/src/response/mod.rs2
-rw-r--r--ipfs-api/src/response/shutdown.rs9
-rw-r--r--ipfs-cli/src/command/mod.rs1
-rw-r--r--ipfs-cli/src/command/shutdown.rs23
-rw-r--r--ipfs-cli/src/main.rs2
8 files changed, 75 insertions, 1 deletions
diff --git a/ipfs-api/src/client.rs b/ipfs-api/src/client.rs
index dd64680..564415f 100644
--- a/ipfs-api/src/client.rs
+++ b/ipfs-api/src/client.rs
@@ -2000,7 +2000,25 @@ impl IpfsClient {
// TODO /resolve
- // TODO /shutdown
+ /// Shutdown the Ipfs daemon.
+ ///
+ /// ```no_run
+ /// # extern crate ipfs_api;
+ /// # extern crate tokio_core;
+ /// #
+ /// use ipfs_api::IpfsClient;
+ /// use tokio_core::reactor::Core;
+ ///
+ /// # fn main() {
+ /// let mut core = Core::new().unwrap();
+ /// let client = IpfsClient::default(&core.handle());
+ /// let req = client.shutdown();
+ /// # }
+ /// ```
+ ///
+ pub fn shutdown(&self) -> AsyncResponse<response::ShutdownResponse> {
+ self.request_empty(&request::Shutdown, None)
+ }
/// Returns bitswap stats.
///
diff --git a/ipfs-api/src/request/mod.rs b/ipfs-api/src/request/mod.rs
index defd0ca..03e2801 100644
--- a/ipfs-api/src/request/mod.rs
+++ b/ipfs-api/src/request/mod.rs
@@ -31,6 +31,7 @@ pub use self::pin::*;
pub use self::ping::*;
pub use self::pubsub::*;
pub use self::refs::*;
+pub use self::shutdown::*;
pub use self::stats::*;
pub use self::swarm::*;
pub use self::tar::*;
@@ -93,6 +94,7 @@ mod pin;
mod ping;
mod pubsub;
mod refs;
+mod shutdown;
mod stats;
mod swarm;
mod tar;
diff --git a/ipfs-api/src/request/shutdown.rs b/ipfs-api/src/request/shutdown.rs
new file mode 100644
index 0000000..a6535a2
--- /dev/null
+++ b/ipfs-api/src/request/shutdown.rs
@@ -0,0 +1,17 @@
+// Copyright 2017 rust-ipfs-api Developers
+//
+// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
+// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
+// http://opensource.org/licenses/MIT>, at your option. This file may not be
+// copied, modified, or distributed except according to those terms.
+//
+
+use request::ApiRequest;
+
+pub struct Shutdown;
+
+impl_skip_serialize!(Shutdown);
+
+impl ApiRequest for Shutdown {
+ const PATH: &'static str = "/shutdown";
+}
diff --git a/ipfs-api/src/response/mod.rs b/ipfs-api/src/response/mod.rs
index f08b6dc..2f70c28 100644
--- a/ipfs-api/src/response/mod.rs
+++ b/ipfs-api/src/response/mod.rs
@@ -35,6 +35,7 @@ pub use self::pubsub::*;
pub use self::refs::*;
pub use self::repo::*;
pub use self::resolve::*;
+pub use self::shutdown::*;
pub use self::stats::*;
pub use self::swarm::*;
pub use self::tar::*;
@@ -85,6 +86,7 @@ mod refs;
mod repo;
mod resolve;
mod serde;
+mod shutdown;
mod stats;
mod swarm;
mod tar;
diff --git a/ipfs-api/src/response/shutdown.rs b/ipfs-api/src/response/shutdown.rs
new file mode 100644
index 0000000..3dd3213
--- /dev/null
+++ b/ipfs-api/src/response/shutdown.rs
@@ -0,0 +1,9 @@
+// Copyright 2017 rust-ipfs-api Developers
+//
+// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
+// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
+// http://opensource.org/licenses/MIT>, at your option. This file may not be
+// copied, modified, or distributed except according to those terms.
+//
+
+pub type ShutdownResponse = ();
diff --git a/ipfs-cli/src/command/mod.rs b/ipfs-cli/src/command/mod.rs
index 351bcf6..c19236b 100644
--- a/ipfs-cli/src/command/mod.rs
+++ b/ipfs-cli/src/command/mod.rs
@@ -36,4 +36,5 @@ pub mod dns;
pub mod file;
pub mod files;
pub mod filestore;
+pub mod shutdown;
pub mod version;
diff --git a/ipfs-cli/src/command/shutdown.rs b/ipfs-cli/src/command/shutdown.rs
new file mode 100644
index 0000000..6cb9c1d
--- /dev/null
+++ b/ipfs-cli/src/command/shutdown.rs
@@ -0,0 +1,23 @@
+// Copyright 2017 rust-ipfs-api Developers
+//
+// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
+// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
+// http://opensource.org/licenses/MIT>, at your option. This file may not be
+// copied, modified, or distributed except according to those terms.
+//
+
+use clap::App;
+use command::EXPECTED_API;
+use ipfs_api::IpfsClient;
+use tokio_core::reactor::Core;
+
+pub fn signature<'a, 'b>() -> App<'a, 'b> {
+ clap_app!(
+ @subcommand shutdown =>
+ (about: "Shutdown IPFS daemon")
+ )
+}
+
+pub fn handle(core: &mut Core, client: &IpfsClient) {
+ core.run(client.shutdown()).expect(EXPECTED_API);
+}
diff --git a/ipfs-cli/src/main.rs b/ipfs-cli/src/main.rs
index b0262aa..eafa12c 100644
--- a/ipfs-cli/src/main.rs
+++ b/ipfs-cli/src/main.rs
@@ -39,6 +39,7 @@ fn main() {
(subcommand: command::file::signature())
(subcommand: command::files::signature())
(subcommand: command::filestore::signature())
+ (subcommand: command::shutdown::signature())
(subcommand: command::version::signature())
).get_matches();
@@ -60,6 +61,7 @@ fn main() {
("file", Some(args)) => command::file::handle(&mut core, &client, args),
("files", Some(args)) => command::files::handle(&mut core, &client, args),
("filestore", Some(args)) => command::filestore::handle(&mut core, &client, args),
+ ("shutdown", _) => command::shutdown::handle(&mut core, &client),
("version", _) => command::version::handle(&mut core, &client),
_ => unreachable!(),
}