1use std::error::Error as StdError;
3use uuid::ParseError;
4use {ServerId, Term};
5
6#[cfg(feature = "use_capnp")]
7use capnp::Error as CapnpError;
8#[cfg(feature = "use_capnp")]
9use capnp::NotInSchema;
10
11#[fail(display = "Consensus error")]
12#[derive(Fail, Debug)]
13pub enum Error {
14 #[fail(display = "Consensus state was not Leader while it had to be.")]
15 MustLeader,
16
17 #[fail(display = "Consensus state was Leader while it had NOT to be.")]
18 MustNotLeader,
19
20 #[fail(display = "Follower responded with inconsistent index.")]
21 BadFollowerIndex,
22
23 #[fail(display = "BUG: peer leader with matching term detected")]
24 AnotherLeader(ServerId, Term),
25
26 #[fail(display = "UUID conversion")]
27 Uuid(#[cause] ParseError),
28
29 #[cfg(feature = "use_capnp")]
30 #[fail(display = "Decoding capnp")]
31 Capnp(#[cause] CapnpError),
32
33 #[cfg(feature = "use_capnp")]
34 #[fail(display = "Detecting capnp schema")]
35 CapnpSchema(#[cause] NotInSchema),
36
37 #[fail(display = "Error in PersistentLog")]
38 PersistentLog(Box<StdError + 'static + Send + Sync>),
40}