cardano_sdk/protocol/
chainsync.rs

1use std::fmt;
2use strum::EnumDiscriminants;
3
4use super::*;
5use cbored::CborRepr;
6
7#[derive(Debug, Clone, CborRepr, EnumDiscriminants)]
8#[cborrepr(enumtype = "tagvariant")]
9#[strum_discriminants(name(ChainSyncKind))]
10pub enum ChainSync {
11    RequestNext,
12    AwaitReply,
13    RollForward(SerializedHeader, Tip),
14    RollBackward(Point, Tip),
15    FindIntersect(Points),
16    IntersectionFound(Point, Tip),
17    IntersectionNotFound(Tip),
18    SyncDone,
19}
20
21impl Protocol for ChainSync {
22    const NUMBER: u16 = 2;
23}
24
25#[derive(Debug, Clone, PartialEq, Eq, CborRepr)]
26#[cborrepr(structure = "array")]
27pub struct Tip {
28    pub point: Point,
29    pub block_number: u64,
30}
31
32impl fmt::Display for Tip {
33    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34        write!(f, "{}-{}", self.block_number, self.point)
35    }
36}
37
38impl Tip {
39    #[allow(dead_code)]
40    pub const ORIGIN: Self = Tip {
41        point: Point::ORIGIN,
42        block_number: 0,
43    };
44}
45
46crate::vec_structure!(Points, Point);