1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Copyright (c) The Diem Core Contributors
// SPDX-License-Identifier: Apache-2.0

use crate::transport::ConnectionMetadata;

/// Errors related to the peer layer in the `NetworkInterface`
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum PeerError {
    NotFound,
}

/// Descriptor of a Peer and how it should rank
#[derive(Clone, Debug)]
pub struct PeerInfo {
    pub status: PeerState,
    pub active_connection: ConnectionMetadata,
}

impl PeerInfo {
    pub fn new(connection_metadata: ConnectionMetadata) -> Self {
        PeerInfo {
            status: PeerState::Connected,
            active_connection: connection_metadata,
        }
    }
}

/// The current state of a `Peer` at any one time
/// TODO: Allow nodes that are unhealthy to stay connected
#[derive(Clone, Copy, Debug, Ord, PartialOrd, Eq, PartialEq)]
pub enum PeerState {
    Connected,
    Disconnecting,
    Disconnected,
}