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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
use num_enum::{IntoPrimitive, TryFromPrimitive, TryFromPrimitiveError};

use crate::error::Error;

impl From<ErrorCode> for Error {
    fn from(ec: ErrorCode) -> Error {
        use ErrorCode::*;
        match ec {
            Ok => Error::UnexpectedError("error code 0 is treated as error".to_string()),
            MarshallingError => Error::MarshallingError,
            BadArguments => Error::BadArguments(&"server error"),
            NoNode => Error::NoNode,
            NoAuth => Error::NoAuth,
            BadVersion => Error::BadVersion,
            NoChildrenForEphemerals => Error::NoChildrenForEphemerals,
            NodeExists => Error::NodeExists,
            NotEmpty => Error::NotEmpty,
            SessionExpired => Error::SessionExpired,
            InvalidAcl => Error::InvalidAcl,
            AuthFailed | SessionClosedRequireSaslAuth => Error::AuthFailed,
            SessionMoved => Error::SessionMoved,
            NotReadOnly => Error::NotReadOnly,
            NoWatcher => Error::NoWatcher,
            ReconfigDisabled => Error::ReconfigDisabled,
            QuotaExceeded => Error::QuotaExceeded,
            Throttled => Error::Throttled,
        }
    }
}

#[repr(i32)]
#[derive(Copy, Clone, Debug, PartialEq, Eq, IntoPrimitive, TryFromPrimitive)]
pub enum ErrorCode {
    Ok = 0,
    MarshallingError = -5,
    BadArguments = -8,
    NoNode = -101,
    NoAuth = -102,
    BadVersion = -103,
    NoChildrenForEphemerals = -108,
    NodeExists = -110,
    NotEmpty = -111,
    SessionExpired = -112,
    InvalidAcl = -114,
    AuthFailed = -115,
    SessionMoved = -118,
    NotReadOnly = -119,
    NoWatcher = -122,
    ReconfigDisabled = -123,
    SessionClosedRequireSaslAuth = -124,
    QuotaExceeded = -125,
    Throttled = -127,
}

impl From<TryFromPrimitiveError<ErrorCode>> for Error {
    fn from(err: TryFromPrimitiveError<ErrorCode>) -> Error {
        return Error::UnexpectedErrorCode(err.number);
    }
}