samod_core/network/
connection_info.rs

1use std::collections::HashMap;
2
3use crate::{ConnectionId, DocumentId, PeerId, UnixTimestamp};
4
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub struct ConnectionInfo {
7    pub id: ConnectionId,
8    pub last_received: Option<UnixTimestamp>,
9    pub last_sent: Option<UnixTimestamp>,
10    pub docs: HashMap<DocumentId, PeerDocState>,
11    pub state: ConnectionState,
12}
13
14#[derive(Debug, Clone, PartialEq, Eq)]
15pub enum ConnectionState {
16    Handshaking,
17    Connected { their_peer_id: PeerId },
18}
19
20#[derive(Debug, Clone, PartialEq, Eq, PartialOrd)]
21pub struct PeerDocState {
22    /// When we last received a message from this peer
23    pub last_received: Option<UnixTimestamp>,
24    /// When we last sent a message to this peer
25    pub last_sent: Option<UnixTimestamp>,
26    /// The heads of the document when we last sent a message
27    pub last_sent_heads: Option<Vec<automerge::ChangeHash>>,
28    /// The last heads of the document that the peer said they had
29    pub last_acked_heads: Option<Vec<automerge::ChangeHash>>,
30}
31
32impl PeerDocState {
33    pub(crate) fn empty() -> Self {
34        Self {
35            last_received: None,
36            last_sent: None,
37            last_sent_heads: None,
38            last_acked_heads: None,
39        }
40    }
41}