zookeeper_client/proto/
error_code.rs1use bytes::BufMut;
2use num_enum::{IntoPrimitive, TryFromPrimitive, TryFromPrimitiveError};
3
4use crate::error::Error;
5use crate::record::{InvalidData, ReadingBuf, SerializableRecord, StaticRecord, UnsafeBuf, UnsafeRead};
6
7impl From<ErrorCode> for Error {
8 fn from(ec: ErrorCode) -> Error {
9 use ErrorCode::*;
10 match ec {
11 Ok => Error::UnexpectedErrorCode(0),
12 MarshallingError => Error::MarshallingError,
13 Unimplemented => Error::Unimplemented,
14 BadArguments => Error::BadArguments(&"server error"),
15 NoNode => Error::NoNode,
16 NoAuth => Error::NoAuth,
17 BadVersion => Error::BadVersion,
18 NoChildrenForEphemerals => Error::NoChildrenForEphemerals,
19 NodeExists => Error::NodeExists,
20 NotEmpty => Error::NotEmpty,
21 SessionExpired => Error::SessionExpired,
22 InvalidAcl => Error::InvalidAcl,
23 AuthFailed | SessionClosedRequireSaslAuth => Error::AuthFailed,
24 SessionMoved => Error::SessionMoved,
25 NotReadOnly => Error::NotReadOnly,
26 NoWatcher => Error::NoWatcher,
27 ReconfigDisabled => Error::ReconfigDisabled,
28 QuotaExceeded => Error::QuotaExceeded,
29 Throttled => Error::Throttled,
30 }
31 }
32}
33
34#[repr(i32)]
35#[derive(Copy, Clone, Debug, PartialEq, Eq, IntoPrimitive, TryFromPrimitive)]
36pub enum ErrorCode {
37 Ok = 0,
38 MarshallingError = -5,
39 Unimplemented = -6,
40 BadArguments = -8,
41 NoNode = -101,
42 NoAuth = -102,
43 BadVersion = -103,
44 NoChildrenForEphemerals = -108,
45 NodeExists = -110,
46 NotEmpty = -111,
47 SessionExpired = -112,
48 InvalidAcl = -114,
49 AuthFailed = -115,
50 SessionMoved = -118,
51 NotReadOnly = -119,
52 NoWatcher = -121,
53 ReconfigDisabled = -123,
54 SessionClosedRequireSaslAuth = -124,
55 QuotaExceeded = -125,
56 Throttled = -127,
57}
58
59impl From<TryFromPrimitiveError<ErrorCode>> for Error {
60 fn from(err: TryFromPrimitiveError<ErrorCode>) -> Error {
61 Error::UnexpectedErrorCode(err.number)
62 }
63}
64
65impl SerializableRecord for ErrorCode {
66 fn serialize(&self, buf: &mut dyn BufMut) {
67 let ec = i32::from(*self);
68 ec.serialize(buf);
69 }
70}
71
72impl StaticRecord for ErrorCode {
73 fn record_len() -> usize {
74 4
75 }
76}
77
78impl UnsafeRead<'_> for ErrorCode {
79 type Error = InvalidData;
80
81 unsafe fn read(buf: &mut ReadingBuf<'_>) -> Result<Self, InvalidData> {
82 match ErrorCode::try_from(buf.get_unchecked_i32()) {
83 Ok(ec) => Ok(ec),
84 Err(err) => Err(InvalidData::UnexpectedErrorCode(err.number)),
85 }
86 }
87}