@@ -2,12 +2,35 @@ use scylla::transport::errors::*;
2
2
3
3
// Re-export error types.
4
4
pub ( crate ) use crate :: cass_error_types:: { CassError , CassErrorSource } ;
5
+ use crate :: query_error:: CassErrorResult ;
5
6
6
- impl From < & QueryError > for CassError {
7
- fn from ( error : & QueryError ) -> Self {
8
- match error {
9
- QueryError :: DbError ( db_error, _string) => CassError :: from ( db_error) ,
10
- QueryError :: BadQuery ( bad_query) => CassError :: from ( bad_query) ,
7
+ pub trait ToCassError {
8
+ fn to_cass_error ( & self ) -> CassError ;
9
+ }
10
+
11
+ impl ToCassError for CassErrorResult {
12
+ fn to_cass_error ( & self ) -> CassError {
13
+ match self {
14
+ CassErrorResult :: Query ( query_error) => query_error. to_cass_error ( ) ,
15
+
16
+ // TODO:
17
+ // For now let's leave these as LIB_INVALID_DATA.
18
+ // I don't see any variants that would make more sense.
19
+ // TBH, I'm almost sure that we should introduce additional enum variants
20
+ // of CassError in the future ~ muzarski.
21
+ CassErrorResult :: ResultMetadataLazyDeserialization ( _) => {
22
+ CassError :: CASS_ERROR_LIB_INVALID_DATA
23
+ }
24
+ CassErrorResult :: Deserialization ( _) => CassError :: CASS_ERROR_LIB_INVALID_DATA ,
25
+ }
26
+ }
27
+ }
28
+
29
+ impl ToCassError for QueryError {
30
+ fn to_cass_error ( & self ) -> CassError {
31
+ match self {
32
+ QueryError :: DbError ( db_error, _string) => db_error. to_cass_error ( ) ,
33
+ QueryError :: BadQuery ( bad_query) => bad_query. to_cass_error ( ) ,
11
34
QueryError :: ProtocolError ( _str) => CassError :: CASS_ERROR_SERVER_PROTOCOL_ERROR ,
12
35
QueryError :: TimeoutError => CassError :: CASS_ERROR_LIB_REQUEST_TIMED_OUT , // This may be either read or write timeout error
13
36
QueryError :: UnableToAllocStreamId => CassError :: CASS_ERROR_LIB_NO_STREAMS ,
@@ -32,9 +55,9 @@ impl From<&QueryError> for CassError {
32
55
}
33
56
}
34
57
35
- impl From < & DbError > for CassError {
36
- fn from ( error : & DbError ) -> Self {
37
- match error {
58
+ impl ToCassError for DbError {
59
+ fn to_cass_error ( & self ) -> CassError {
60
+ match self {
38
61
DbError :: ServerError => CassError :: CASS_ERROR_SERVER_SERVER_ERROR ,
39
62
DbError :: ProtocolError => CassError :: CASS_ERROR_SERVER_PROTOCOL_ERROR ,
40
63
DbError :: AuthenticationError => CassError :: CASS_ERROR_SERVER_BAD_CREDENTIALS ,
@@ -62,9 +85,9 @@ impl From<&DbError> for CassError {
62
85
}
63
86
}
64
87
65
- impl From < & BadQuery > for CassError {
66
- fn from ( error : & BadQuery ) -> Self {
67
- match error {
88
+ impl ToCassError for BadQuery {
89
+ fn to_cass_error ( & self ) -> CassError {
90
+ match self {
68
91
BadQuery :: SerializeValuesError ( _serialize_values_error) => {
69
92
CassError :: CASS_ERROR_LAST_ENTRY
70
93
}
@@ -81,9 +104,9 @@ impl From<&BadQuery> for CassError {
81
104
}
82
105
}
83
106
84
- impl From < & NewSessionError > for CassError {
85
- fn from ( error : & NewSessionError ) -> Self {
86
- match error {
107
+ impl ToCassError for NewSessionError {
108
+ fn to_cass_error ( & self ) -> CassError {
109
+ match self {
87
110
NewSessionError :: FailedToResolveAnyHostname ( _hostnames) => {
88
111
CassError :: CASS_ERROR_LIB_NO_HOSTS_AVAILABLE
89
112
}
@@ -117,9 +140,9 @@ impl From<&NewSessionError> for CassError {
117
140
}
118
141
}
119
142
120
- impl From < & BadKeyspaceName > for CassError {
121
- fn from ( error : & BadKeyspaceName ) -> Self {
122
- match error {
143
+ impl ToCassError for BadKeyspaceName {
144
+ fn to_cass_error ( & self ) -> CassError {
145
+ match self {
123
146
BadKeyspaceName :: Empty => CassError :: CASS_ERROR_LAST_ENTRY ,
124
147
BadKeyspaceName :: TooLong ( _string, _usize) => CassError :: CASS_ERROR_LAST_ENTRY ,
125
148
BadKeyspaceName :: IllegalCharacter ( _string, _char) => CassError :: CASS_ERROR_LAST_ENTRY ,
@@ -133,6 +156,12 @@ pub trait CassErrorMessage {
133
156
fn msg ( & self ) -> String ;
134
157
}
135
158
159
+ impl CassErrorMessage for CassErrorResult {
160
+ fn msg ( & self ) -> String {
161
+ self . to_string ( )
162
+ }
163
+ }
164
+
136
165
impl CassErrorMessage for QueryError {
137
166
fn msg ( & self ) -> String {
138
167
self . to_string ( )
0 commit comments