From eb6d4633cdf6d0f0cbe2525cb313a139578ee307 Mon Sep 17 00:00:00 2001 From: yggverse Date: Sat, 16 Aug 2025 18:11:50 +0300 Subject: [PATCH] handle optional response results --- src/main.rs | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/src/main.rs b/src/main.rs index 5aeea5e..182fe51 100644 --- a/src/main.rs +++ b/src/main.rs @@ -40,8 +40,13 @@ fn main() -> Result<()> { todo!() } // start crawler - for peer in p.response.unwrap().peers { - crawl(peer.key, &config, &mut ygg, &mut key, &mut tcp, &mut udp)?; + match p.response { + Some(response) => { + for peer in response.peers { + crawl(peer.key, &config, &mut ygg, &mut key, &mut tcp, &mut udp)?; + } + } + None => println!("node has no peers to connect."), } Ok(()) } @@ -54,14 +59,17 @@ fn crawl( tcp: &mut Option>, udp: &mut Option<(Vec, Udp)>, ) -> Result<()> { - if !key.contains(&k) { - if config.debug { - println!("get peers for `{k}`..."); - } - let p = ygg.remote_peers(&k)?; - if p.status == "success" { - key.push(k); - for (host, peers) in p.response.unwrap() { + if key.contains(&k) { + return Ok(()); + } + if config.debug { + println!("get peers for `{k}`..."); + } + let p = ygg.remote_peers(&k)?; + if p.status == "success" { + key.push(k); + if let Some(response) = p.response { + for (host, peers) in response { for port in &config.port { let address = SocketAddr::new(IpAddr::V6(host), *port); if let Some(index) = tcp @@ -94,14 +102,14 @@ fn crawl( crawl(k, config, ygg, key, tcp, udp)?; } } - } else if config.debug { - println!( - "\t{}: peer `{k}` return status `{}`, skip.", - WARNING.yellow(), - p.status - ); - key.push(k) // ban } + } else if config.debug { + println!( + "\t{}: peer `{k}` return status `{}`, skip.", + WARNING.yellow(), + p.status + ); + key.push(k) // ban } Ok(()) }