Explorar el Código

dnetview: check whether selectable object is empty

* handle error that occurs when data is not fully initialized
lunar-mining hace 4 años
padre
commit
8f7da1c9ac
Se han modificado 1 ficheros con 36 adiciones y 29 borrados
  1. 36 29
      bin/dnetview/src/view.rs

+ 36 - 29
bin/dnetview/src/view.rs

@@ -15,7 +15,7 @@ use crate::{
     error::{DnetViewError, DnetViewResult},
     model::{NodeInfo, SelectableObject},
 };
-//use log::debug;
+use log::debug;
 
 #[derive(Debug)]
 pub struct View {
@@ -187,41 +187,48 @@ impl View {
         let style = Style::default();
         let mut spans = Vec::new();
 
-        let info = self.selectables.get(&selected);
+        if self.selectables.is_empty() {
+            // we have not received any selectable data
+            return Ok(())
+        } else {
+            let info = self.selectables.get(&selected);
 
-        match info {
-            Some(SelectableObject::Node(_node)) => {
-                let name_span = Spans::from("Node Info");
-                spans.push(name_span);
-            }
-            Some(SelectableObject::Session(_session)) => {
-                let name_span = Spans::from("Session Info");
-                spans.push(name_span);
-            }
-            Some(SelectableObject::Connect(connect)) => {
-                let log = self.msg_log.get(&connect.id);
-                match log {
-                    Some(values) => {
-                        for (k, v) in values {
-                            match k.as_str() {
-                                "send" => {
-                                    let msg_log =
-                                        Spans::from(Span::styled(format!("S: {}", v), style));
-                                    spans.push(msg_log);
-                                }
-                                "recv" => {
-                                    let msg_log =
-                                        Spans::from(Span::styled(format!("R: {}", v), style));
-                                    spans.push(msg_log);
+            match info {
+                Some(SelectableObject::Node(_node)) => {
+                    let name_span = Spans::from("Node Info");
+                    spans.push(name_span);
+                }
+                Some(SelectableObject::Session(_session)) => {
+                    let name_span = Spans::from("Session Info");
+                    spans.push(name_span);
+                }
+                Some(SelectableObject::Connect(connect)) => {
+                    let log = self.msg_log.get(&connect.id);
+                    match log {
+                        Some(values) => {
+                            for (k, v) in values {
+                                match k.as_str() {
+                                    "send" => {
+                                        let msg_log =
+                                            Spans::from(Span::styled(format!("S: {}", v), style));
+                                        spans.push(msg_log);
+                                    }
+                                    "recv" => {
+                                        let msg_log =
+                                            Spans::from(Span::styled(format!("R: {}", v), style));
+                                        spans.push(msg_log);
+                                    }
+                                    data => {
+                                        return Err(DnetViewError::UnexpectedData(data.to_string()))
+                                    }
                                 }
-                                data => return Err(DnetViewError::UnexpectedData(data.to_string())),
                             }
                         }
+                        None => return Err(DnetViewError::CannotFindId),
                     }
-                    None => return Err(DnetViewError::CannotFindId),
                 }
+                None => return Err(DnetViewError::NotSelectableObject),
             }
-            None => return Err(DnetViewError::NotSelectableObject),
         }
 
         let graph = Paragraph::new(spans)