cardano_sdk/protocol/
chainsync.rs1use 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);