@@ -33,7 +33,7 @@ impl ToCassError for ExecutionError {
33
33
ExecutionError :: BadQuery ( bad_query) => bad_query. to_cass_error ( ) ,
34
34
ExecutionError :: RequestTimeout ( _) => CassError :: CASS_ERROR_LIB_REQUEST_TIMED_OUT ,
35
35
ExecutionError :: EmptyPlan => CassError :: CASS_ERROR_LIB_INVALID_STATE ,
36
- ExecutionError :: MetadataError ( _ ) => CassError :: CASS_ERROR_LIB_INVALID_STATE ,
36
+ ExecutionError :: MetadataError ( e ) => e . to_cass_error ( ) ,
37
37
ExecutionError :: ConnectionPoolError ( e) => e. to_cass_error ( ) ,
38
38
ExecutionError :: PrepareError ( e) => e. to_cass_error ( ) ,
39
39
ExecutionError :: LastAttemptError ( e) => e. to_cass_error ( ) ,
@@ -47,11 +47,7 @@ impl ToCassError for ExecutionError {
47
47
48
48
impl ToCassError for ConnectionPoolError {
49
49
fn to_cass_error ( & self ) -> CassError {
50
- // I know that TranslationError (corresponding to CASS_ERROR_LIB_HOST_RESOLUTION)
51
- // is hidden under the ConnectionPoolError.
52
- // However, we still have a lot work to do when it comes to error conversion.
53
- // I will address it, once we start resolving all issues related to error conversion.
54
- CassError :: CASS_ERROR_LIB_UNABLE_TO_CONNECT
50
+ CassError :: CASS_ERROR_LIB_NO_HOSTS_AVAILABLE
55
51
}
56
52
}
57
53
@@ -79,7 +75,7 @@ impl ToCassError for RequestAttemptError {
79
75
}
80
76
RequestAttemptError :: UnableToAllocStreamId => CassError :: CASS_ERROR_LIB_NO_STREAMS ,
81
77
RequestAttemptError :: BrokenConnectionError ( _) => {
82
- CassError :: CASS_ERROR_LIB_UNABLE_TO_CONNECT
78
+ CassError :: CASS_ERROR_LIB_NO_HOSTS_AVAILABLE
83
79
}
84
80
RequestAttemptError :: BodyExtensionsParseError ( _) => {
85
81
CassError :: CASS_ERROR_LIB_MESSAGE_ENCODE
@@ -164,7 +160,7 @@ impl ToCassError for NewSessionError {
164
160
CassError :: CASS_ERROR_LIB_NO_HOSTS_AVAILABLE
165
161
}
166
162
NewSessionError :: EmptyKnownNodesList => CassError :: CASS_ERROR_LIB_NO_HOSTS_AVAILABLE ,
167
- NewSessionError :: MetadataError ( _ ) => CassError :: CASS_ERROR_LIB_INVALID_STATE ,
163
+ NewSessionError :: MetadataError ( e ) => e . to_cass_error ( ) ,
168
164
NewSessionError :: UseKeyspaceError ( _) => {
169
165
CassError :: CASS_ERROR_LIB_UNABLE_TO_SET_KEYSPACE
170
166
}
@@ -174,6 +170,36 @@ impl ToCassError for NewSessionError {
174
170
}
175
171
}
176
172
173
+ impl ToCassError for MetadataError {
174
+ fn to_cass_error ( & self ) -> CassError {
175
+ match self {
176
+ MetadataError :: ConnectionPoolError ( e) => e. to_cass_error ( ) ,
177
+ MetadataError :: FetchError ( e) => match & e. error {
178
+ // Server bug - invalid CQL type in system table.
179
+ MetadataFetchErrorKind :: InvalidColumnType ( _) => {
180
+ CassError :: CASS_ERROR_LIB_UNEXPECTED_RESPONSE
181
+ }
182
+ MetadataFetchErrorKind :: PrepareError ( e) => e. to_cass_error ( ) ,
183
+ MetadataFetchErrorKind :: SerializationError ( e) => e. to_cass_error ( ) ,
184
+ MetadataFetchErrorKind :: NextRowError ( _) => {
185
+ CassError :: CASS_ERROR_LIB_UNEXPECTED_RESPONSE
186
+ }
187
+
188
+ // non_exhaustive
189
+ _ => CassError :: CASS_ERROR_LAST_ENTRY ,
190
+ } ,
191
+ // Remaining errors indicate a serious server bug - e.g. all peers have empty token lists.
192
+ MetadataError :: Keyspaces ( _)
193
+ | MetadataError :: Peers ( _)
194
+ | MetadataError :: Tables ( _)
195
+ | MetadataError :: Udts ( _) => CassError :: CASS_ERROR_LIB_UNEXPECTED_RESPONSE ,
196
+
197
+ // non_exhaustive
198
+ _ => CassError :: CASS_ERROR_LAST_ENTRY ,
199
+ }
200
+ }
201
+ }
202
+
177
203
impl ToCassError for BadKeyspaceName {
178
204
fn to_cass_error ( & self ) -> CassError {
179
205
match self {
0 commit comments