diff options
Diffstat (limited to 'ipfs-cli/src/command/dht.rs')
-rw-r--r-- | ipfs-cli/src/command/dht.rs | 121 |
1 files changed, 60 insertions, 61 deletions
diff --git a/ipfs-cli/src/command/dht.rs b/ipfs-cli/src/command/dht.rs index 9f95d3a..0e13f22 100644 --- a/ipfs-cli/src/command/dht.rs +++ b/ipfs-cli/src/command/dht.rs @@ -6,44 +6,10 @@ // copied, modified, or distributed except according to those terms. // -use clap::{App, ArgMatches}; -use command::EXPECTED_API; -use futures::stream::Stream; -use ipfs_api::IpfsClient; +use clap::App; +use command::CliCommand; +use futures::{Future, Stream}; use ipfs_api::response::DhtMessage; -use tokio_core::reactor::Core; - -pub fn signature<'a, 'b>() -> App<'a, 'b> { - clap_app!( - @subcommand dht => - (@setting SubcommandRequiredElseHelp) - (@subcommand findpeer => - (about: "Query the DHT for all of the multiaddresses associated with a Peer ID") - (@arg PEER: +required "Peer to search for") - ) - (@subcommand findprovs => - (about: "Find peers in the DHT that can provide the given key") - (@arg KEY: +required "Key to search for") - ) - (@subcommand get => - (about: "Given a key, query the DHT for its best value") - (@arg KEY: +required "The key search for") - ) - (@subcommand provide => - (about: "Announce to the network that you are providing the given values") - (@arg KEY: +required "The key you are providing") - ) - (@subcommand put => - (about: "Write a key/value pair to the DHT") - (@arg KEY: +required "The key to store the value at") - (@arg VALUE: +required "The value to store") - ) - (@subcommand query => - (about: "Find the closest peer to a given peer by querying the DHT") - (@arg PEER: +required "The peer to run the query against") - ) - ) -} fn print_dht_response<E>(res: DhtMessage) -> Result<(), E> { println!(); @@ -64,42 +30,75 @@ fn print_dht_response<E>(res: DhtMessage) -> Result<(), E> { Ok(()) } -pub fn handle(core: &mut Core, client: &IpfsClient, args: &ArgMatches) { - let req = match args.subcommand() { - ("findpeer", Some(args)) => { +pub struct Command; + +impl CliCommand for Command { + const NAME: &'static str = "dht"; + + fn signature<'a, 'b>() -> App<'a, 'b> { + clap_app!( + @subcommand dht => + (@setting SubcommandRequiredElseHelp) + (@subcommand findpeer => + (about: "Query the DHT for all of the multiaddresses associated with a Peer ID") + (@arg PEER: +required "Peer to search for") + ) + (@subcommand findprovs => + (about: "Find peers in the DHT that can provide the given key") + (@arg KEY: +required "Key to search for") + ) + (@subcommand get => + (about: "Given a key, query the DHT for its best value") + (@arg KEY: +required "The key search for") + ) + (@subcommand provide => + (about: "Announce to the network that you are providing the given values") + (@arg KEY: +required "The key you are providing") + ) + (@subcommand put => + (about: "Write a key/value pair to the DHT") + (@arg KEY: +required "The key to store the value at") + (@arg VALUE: +required "The value to store") + ) + (@subcommand query => + (about: "Find the closest peer to a given peer by querying the DHT") + (@arg PEER: +required "The peer to run the query against") + ) + ) + } + + handle!( + client; + ("findpeer", args) => { let peer = args.value_of("PEER").unwrap(); - client.dht_findpeer(peer) - } - ("findprovs", Some(args)) => { + client.dht_findpeer(peer).for_each(print_dht_response) + }, + ("findprovs", args) => { let key = args.value_of("KEY").unwrap(); - client.dht_findprovs(key) - } - ("get", Some(args)) => { + client.dht_findprovs(key).for_each(print_dht_response) + }, + ("get", args) => { let key = args.value_of("KEY").unwrap(); - client.dht_get(key) - } - ("provide", Some(args)) => { + client.dht_get(key).for_each(print_dht_response) + }, + ("provide", args) => { let key = args.value_of("KEY").unwrap(); - client.dht_provide(&key) - } - ("put", Some(args)) => { + client.dht_provide(&key).for_each(print_dht_response) + }, + ("put", args) => { let key = args.value_of("KEY").unwrap(); let val = args.value_of("VALUE").unwrap(); - client.dht_put(key, val) - } - ("query", Some(args)) => { + client.dht_put(key, val).for_each(print_dht_response) + }, + ("query", args) => { let peer = args.value_of("PEER").unwrap(); - client.dht_query(peer) + client.dht_query(peer).for_each(print_dht_response) } - _ => unreachable!(), - }; - - core.run(req.for_each(print_dht_response)) - .expect(EXPECTED_API); + ); } |