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}