samod_core/network/
connection_info.rs1use std::collections::HashMap;
2
3use crate::{ConnectionId, DocumentId, PeerId, UnixTimestamp};
4
5#[derive(Debug, Clone, PartialEq, Eq)]
7pub struct ConnectionInfo {
8 pub id: ConnectionId,
9 pub last_received: Option<UnixTimestamp>,
10 pub last_sent: Option<UnixTimestamp>,
11 pub docs: HashMap<DocumentId, PeerDocState>,
13 pub state: ConnectionState,
15}
16
17#[derive(Debug, Clone, PartialEq, Eq)]
18pub enum ConnectionState {
19 Handshaking,
21 Connected { their_peer_id: PeerId },
23}
24
25#[derive(Debug, Clone, PartialEq, Eq, PartialOrd)]
27pub struct PeerDocState {
28 pub last_received: Option<UnixTimestamp>,
30 pub last_sent: Option<UnixTimestamp>,
32 pub last_sent_heads: Option<Vec<automerge::ChangeHash>>,
34 pub last_acked_heads: Option<Vec<automerge::ChangeHash>>,
36 pub shared_heads: Option<Vec<automerge::ChangeHash>>,
38 pub their_heads: Option<Vec<automerge::ChangeHash>>,
40}
41
42impl PeerDocState {
43 pub(crate) fn empty() -> Self {
44 Self {
45 last_received: None,
46 last_sent: None,
47 last_sent_heads: None,
48 last_acked_heads: None,
49 shared_heads: None,
50 their_heads: None,
51 }
52 }
53}