|
1 | 1 | use anyhow::Result; |
2 | 2 | use async_std::stream::StreamExt; |
| 3 | +use futures::TryFutureExt; |
3 | 4 | use ipfs_embed::{DefaultParams, Ipfs, NetworkConfig, StorageConfig}; |
4 | 5 | use ipfs_embed_cli::{keypair, Command, Config, Event}; |
5 | 6 | use parking_lot::Mutex; |
@@ -45,11 +46,11 @@ async fn run() -> Result<()> { |
45 | 46 | }; |
46 | 47 | network.identify.as_mut().unwrap().agent_version = node_name; |
47 | 48 |
|
48 | | - let ipfs = Ipfs::<DefaultParams>::new(ipfs_embed::Config { storage, network }).await?; |
49 | | - let mut events = ipfs.swarm_events(); |
| 49 | + let mut ipfs = Ipfs::<DefaultParams>::new(ipfs_embed::Config { storage, network }).await?; |
| 50 | + let mut events = ipfs.swarm_events().await?; |
50 | 51 |
|
51 | 52 | for addr in config.listen_on { |
52 | | - let _ = ipfs.listen_on(addr)?; |
| 53 | + let _ = ipfs.listen_on(addr); |
53 | 54 | } |
54 | 55 |
|
55 | 56 | for addr in config.external { |
@@ -111,36 +112,38 @@ async fn run() -> Result<()> { |
111 | 112 | loop { |
112 | 113 | line.clear(); |
113 | 114 | stdin.read_line(&mut line)?; |
114 | | - match line.parse()? { |
115 | | - Command::AddAddress(peer, addr) => { |
116 | | - ipfs.lock().add_address(&peer, addr); |
| 115 | + #[allow(clippy::unit_arg)] |
| 116 | + let result = match line.parse() { |
| 117 | + Ok(Command::AddAddress(peer, addr)) => Ok(ipfs.lock().add_address(peer, addr)), |
| 118 | + Ok(Command::Dial(peer)) => Ok(ipfs.lock().dial(peer)), |
| 119 | + Ok(Command::PrunePeers) => Ok(ipfs.lock().prune_peers(Duration::ZERO)), |
| 120 | + Ok(Command::Get(cid)) => ipfs |
| 121 | + .lock() |
| 122 | + .get(&cid) |
| 123 | + .map(|block| writeln!(stdout, "{}", Event::Block(block)).expect("print")), |
| 124 | + Ok(Command::Insert(block)) => ipfs.lock().insert(block), |
| 125 | + Ok(Command::Alias(alias, cid)) => ipfs.lock().alias(&alias, cid.as_ref()), |
| 126 | + Ok(Command::Flush) => { |
| 127 | + let f = ipfs |
| 128 | + .lock() |
| 129 | + .flush() |
| 130 | + .inspect_ok(|_| writeln!(stdout, "{}", Event::Flushed).expect("print")); |
| 131 | + f.await |
117 | 132 | } |
118 | | - Command::Dial(peer) => { |
119 | | - ipfs.lock().dial(&peer); |
120 | | - } |
121 | | - Command::PrunePeers => { |
122 | | - ipfs.lock().prune_peers(Duration::ZERO); |
123 | | - } |
124 | | - Command::Get(cid) => { |
125 | | - let block = ipfs.lock().get(&cid)?; |
126 | | - writeln!(stdout, "{}", Event::Block(block))?; |
127 | | - } |
128 | | - Command::Insert(block) => { |
129 | | - ipfs.lock().insert(block)?; |
130 | | - } |
131 | | - Command::Alias(alias, cid) => { |
132 | | - ipfs.lock().alias(&alias, cid.as_ref())?; |
133 | | - } |
134 | | - Command::Flush => { |
135 | | - ipfs.lock().flush().await?; |
136 | | - writeln!(stdout, "{}", Event::Flushed)?; |
137 | | - } |
138 | | - Command::Sync(cid) => { |
| 133 | + Ok(Command::Sync(cid)) => { |
139 | 134 | let providers = ipfs.lock().peers(); |
140 | 135 | tracing::debug!("sync {} from {:?}", cid, providers); |
141 | | - ipfs.lock().sync(&cid, providers).await?; |
142 | | - writeln!(stdout, "{}", Event::Synced)?; |
| 136 | + let f = ipfs |
| 137 | + .lock() |
| 138 | + .sync(&cid, providers) |
| 139 | + .and_then(|f| f) |
| 140 | + .inspect_ok(|_| writeln!(stdout, "{}", Event::Synced).expect("print")); |
| 141 | + f.await |
143 | 142 | } |
| 143 | + Err(err) => Err(err), |
| 144 | + }; |
| 145 | + if let Err(err) = result { |
| 146 | + eprintln!("main loop error (line = {}): {}", line, err); |
144 | 147 | } |
145 | 148 | } |
146 | 149 | } |
0 commit comments