model.rs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. use async_std::sync::Mutex;
  2. use fxhash::{FxHashMap, FxHashSet};
  3. use serde::Deserialize;
  4. type NodeId = u32;
  5. type SessionId = u32;
  6. type ConnectId = u32;
  7. #[derive(Clone, Debug, PartialEq, Eq, Hash)]
  8. pub enum SelectableObject {
  9. Node(NodeInfo),
  10. Session(SessionInfo),
  11. Connect(ConnectInfo),
  12. }
  13. pub struct Model {
  14. pub ids: Mutex<FxHashSet<u32>>,
  15. pub infos: Mutex<FxHashMap<u32, SelectableObject>>,
  16. }
  17. impl Model {
  18. pub fn new(
  19. ids: Mutex<FxHashSet<u32>>,
  20. infos: Mutex<FxHashMap<u32, SelectableObject>>,
  21. ) -> Model {
  22. Model { ids, infos }
  23. }
  24. }
  25. #[derive(Clone, Deserialize, Debug, PartialEq, Eq, Hash)]
  26. pub struct NodeInfo {
  27. pub node_id: NodeId,
  28. pub node_name: String,
  29. pub children: Vec<SessionInfo>,
  30. }
  31. impl NodeInfo {
  32. pub fn new(node_id: NodeId, node_name: String, children: Vec<SessionInfo>) -> NodeInfo {
  33. NodeInfo { node_id, node_name, children }
  34. }
  35. }
  36. #[derive(Clone, Deserialize, Debug, PartialEq, Eq, Hash)]
  37. pub struct SessionInfo {
  38. pub session_id: SessionId,
  39. pub parent: NodeId,
  40. pub children: Vec<ConnectInfo>,
  41. }
  42. impl SessionInfo {
  43. pub fn new(session_id: SessionId, parent: NodeId, children: Vec<ConnectInfo>) -> SessionInfo {
  44. SessionInfo { session_id, parent, children }
  45. }
  46. }
  47. #[derive(Clone, Deserialize, Debug, PartialEq, Eq, Hash)]
  48. pub struct ConnectInfo {
  49. pub connect_id: ConnectId,
  50. pub addr: String,
  51. pub is_empty: bool,
  52. pub last_msg: String,
  53. pub last_status: String,
  54. pub state: String,
  55. pub msg_log: Vec<String>,
  56. pub parent: SessionId,
  57. }
  58. impl ConnectInfo {
  59. pub fn new(
  60. connect_id: ConnectId,
  61. addr: String,
  62. is_empty: bool,
  63. last_msg: String,
  64. last_status: String,
  65. state: String,
  66. msg_log: Vec<String>,
  67. parent: SessionId,
  68. ) -> ConnectInfo {
  69. ConnectInfo { connect_id, addr, is_empty, last_msg, last_status, state, msg_log, parent }
  70. }
  71. }