From a6c716e771ac041323fefcc1d04dc98490c38eff Mon Sep 17 00:00:00 2001 From: Ferris Tseng Date: Tue, 23 Jan 2018 20:17:55 -0500 Subject: add shutdown command --- ipfs-api/src/client.rs | 20 +++++++++++++++++++- ipfs-api/src/request/mod.rs | 2 ++ ipfs-api/src/request/shutdown.rs | 17 +++++++++++++++++ ipfs-api/src/response/mod.rs | 2 ++ ipfs-api/src/response/shutdown.rs | 9 +++++++++ ipfs-cli/src/command/mod.rs | 1 + ipfs-cli/src/command/shutdown.rs | 23 +++++++++++++++++++++++ ipfs-cli/src/main.rs | 2 ++ 8 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 ipfs-api/src/request/shutdown.rs create mode 100644 ipfs-api/src/response/shutdown.rs create mode 100644 ipfs-cli/src/command/shutdown.rs 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 { + 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, or the MIT license , 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, or the MIT license , 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, or the MIT license , 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!(), } -- cgit v1.2.3