fix(tonic): Expose h2 error instead of reason (#883)
This commit is contained in:
+4
-8
@@ -325,7 +325,7 @@ impl Status {
|
|||||||
#[cfg(feature = "transport")]
|
#[cfg(feature = "transport")]
|
||||||
let err = match err.downcast::<h2::Error>() {
|
let err = match err.downcast::<h2::Error>() {
|
||||||
Ok(h2) => {
|
Ok(h2) => {
|
||||||
return Ok(Status::from_h2_error(&*h2));
|
return Ok(Status::from_h2_error(h2));
|
||||||
}
|
}
|
||||||
Err(err) => err,
|
Err(err) => err,
|
||||||
};
|
};
|
||||||
@@ -340,7 +340,7 @@ impl Status {
|
|||||||
|
|
||||||
// FIXME: bubble this into `transport` and expose generic http2 reasons.
|
// FIXME: bubble this into `transport` and expose generic http2 reasons.
|
||||||
#[cfg(feature = "transport")]
|
#[cfg(feature = "transport")]
|
||||||
fn from_h2_error(err: &h2::Error) -> Status {
|
fn from_h2_error(err: Box<h2::Error>) -> Status {
|
||||||
// See https://github.com/grpc/grpc/blob/3977c30/doc/PROTOCOL-HTTP2.md#errors
|
// See https://github.com/grpc/grpc/blob/3977c30/doc/PROTOCOL-HTTP2.md#errors
|
||||||
let code = match err.reason() {
|
let code = match err.reason() {
|
||||||
Some(h2::Reason::NO_ERROR)
|
Some(h2::Reason::NO_ERROR)
|
||||||
@@ -359,11 +359,7 @@ impl Status {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let mut status = Self::new(code, format!("h2 protocol error: {}", err));
|
let mut status = Self::new(code, format!("h2 protocol error: {}", err));
|
||||||
let error = err
|
status.source = Some(err);
|
||||||
.reason()
|
|
||||||
.map(h2::Error::from)
|
|
||||||
.map(|err| Box::new(err) as Box<dyn Error + Send + Sync + 'static>);
|
|
||||||
status.source = error;
|
|
||||||
status
|
status
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -632,7 +628,7 @@ fn invalid_header_value_byte<Error: fmt::Display>(err: Error) -> Status {
|
|||||||
#[cfg(feature = "transport")]
|
#[cfg(feature = "transport")]
|
||||||
impl From<h2::Error> for Status {
|
impl From<h2::Error> for Status {
|
||||||
fn from(err: h2::Error) -> Self {
|
fn from(err: h2::Error) -> Self {
|
||||||
Status::from_h2_error(&err)
|
Status::from_h2_error(Box::new(err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user