use async_std::sync::Mutex; use fxhash::{FxHashMap, FxHashSet}; use serde::Deserialize; type NodeId = u32; type SessionId = u32; type ConnectId = u32; #[derive(Clone, Debug, PartialEq, Eq, Hash)] pub enum SelectableObject { Node(NodeInfo), Session(SessionInfo), Connect(ConnectInfo), } pub struct Model { pub ids: Mutex>, pub infos: Mutex>, } impl Model { pub fn new( ids: Mutex>, infos: Mutex>, ) -> Model { Model { ids, infos } } } #[derive(Clone, Deserialize, Debug, PartialEq, Eq, Hash)] pub struct NodeInfo { pub node_id: NodeId, pub node_name: String, pub children: Vec, } impl NodeInfo { pub fn new(node_id: NodeId, node_name: String, children: Vec) -> NodeInfo { NodeInfo { node_id, node_name, children } } } #[derive(Clone, Deserialize, Debug, PartialEq, Eq, Hash)] pub struct SessionInfo { pub session_id: SessionId, pub parent: NodeId, pub children: Vec, } impl SessionInfo { pub fn new(session_id: SessionId, parent: NodeId, children: Vec) -> SessionInfo { SessionInfo { session_id, parent, children } } } #[derive(Clone, Deserialize, Debug, PartialEq, Eq, Hash)] pub struct ConnectInfo { pub connect_id: ConnectId, pub addr: String, pub is_empty: bool, pub last_msg: String, pub last_status: String, pub state: String, pub msg_log: Vec, pub parent: SessionId, } impl ConnectInfo { pub fn new( connect_id: ConnectId, addr: String, is_empty: bool, last_msg: String, last_status: String, state: String, msg_log: Vec, parent: SessionId, ) -> ConnectInfo { ConnectInfo { connect_id, addr, is_empty, last_msg, last_status, state, msg_log, parent } } }