Skip to content

Commit e7e95c3

Browse files
committed
Expose datafusion_error_to_tonic_status and tonic_status_to_datafusion_error functions
1 parent 3accfdb commit e7e95c3

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

src/errors/mod.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,35 @@
1+
use crate::errors::datafusion_error::DataFusionErrorProto;
2+
use datafusion::common::internal_datafusion_err;
3+
use datafusion::error::DataFusionError;
4+
use prost::Message;
5+
16
mod arrow_error;
27
mod datafusion_error;
38
mod io_error;
49
mod objectstore_error;
510
mod parquet_error;
611
mod parser_error;
712
mod schema_error;
13+
14+
pub fn datafusion_error_to_tonic_status(err: &DataFusionError) -> tonic::Status {
15+
let err = DataFusionErrorProto::from_datafusion_error(err).encode_to_vec();
16+
let status = tonic::Status::with_details(tonic::Code::Internal, "DataFusionError", err.into());
17+
status
18+
}
19+
20+
pub fn tonic_status_to_datafusion_error(status: &tonic::Status) -> Option<DataFusionError> {
21+
if status.code() != tonic::Code::Internal {
22+
return None;
23+
}
24+
25+
if status.message() != "DataFusionError" {
26+
return None;
27+
}
28+
29+
match DataFusionErrorProto::decode(status.details()) {
30+
Ok(err_proto) => Some(err_proto.to_datafusion_err()),
31+
Err(err) => Some(internal_datafusion_err!(
32+
"Cannot decode DataFusionError: {err}"
33+
)),
34+
}
35+
}

0 commit comments

Comments
 (0)