model.rs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. use async_std::sync::Mutex;
  2. use darkfi::error::Result;
  3. use tui::widgets::ListState;
  4. pub struct Model {
  5. pub id_list: IdList,
  6. pub info_list: InfoList,
  7. }
  8. impl Model {
  9. pub fn new(id_list: IdList, info_list: InfoList) -> Model {
  10. Model { id_list, info_list }
  11. }
  12. pub async fn update(self, infos: Vec<NodeInfo>) -> Result<()> {
  13. for node in infos {
  14. self.info_list.infos.lock().await.push(node.clone());
  15. self.id_list.node_id.lock().await.push(node.clone().id);
  16. }
  17. Ok(())
  18. }
  19. }
  20. pub struct IdList {
  21. pub state: Mutex<ListState>,
  22. pub node_id: Mutex<Vec<String>>,
  23. }
  24. impl IdList {
  25. pub fn new(node_id: Vec<String>) -> IdList {
  26. let node_id = Mutex::new(node_id);
  27. IdList { state: Mutex::new(ListState::default()), node_id }
  28. }
  29. }
  30. pub struct InfoList {
  31. pub index: Mutex<usize>,
  32. pub infos: Mutex<Vec<NodeInfo>>,
  33. }
  34. impl InfoList {
  35. pub fn new(infos: Vec<NodeInfo>) -> InfoList {
  36. let index = 0;
  37. let index = Mutex::new(index);
  38. let infos = Mutex::new(infos);
  39. InfoList { index, infos }
  40. }
  41. }
  42. #[derive(Clone, Debug)]
  43. pub struct NodeInfo {
  44. pub id: String,
  45. pub outgoing: Vec<Connection>,
  46. pub incoming: Vec<Connection>,
  47. }
  48. impl NodeInfo {
  49. pub fn new() -> NodeInfo {
  50. NodeInfo { id: String::new(), outgoing: Vec::new(), incoming: Vec::new() }
  51. }
  52. }
  53. #[derive(Clone, Debug)]
  54. pub struct Connection {
  55. pub id: String,
  56. pub message: String,
  57. }
  58. impl Connection {
  59. pub fn new(id: String, message: String) -> Connection {
  60. Connection { id, message }
  61. }
  62. }