You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Then the async/await wrappers (or maybe at some lower level) instead of simply propagating the error, could transform it to status and then add metadata and throw it, something like:
The GRPCStatusAndTrailers could conform to GRPCStatusTransformable for backward compatibility.
This would be an easy win, and allow library users to easily obtain detailed error information.
Questions
Do you plan to support the Rich Error Model in the long term?
What do you think about the alternative solution (for example the one above) in the short term for async/await APIs?
The text was updated successfully, but these errors were encountered:
Do you plan to support the Rich Error Model in the long term?
For v1, I don't think so. We're focused on v2 at the moment where we do plan to have support.
What do you think about the alternative solution (for example the one above) in the short term for async/await APIs?
I don't think we can make the above change because the thrown error type changes: any users catching a GRPCStatus will have the semantics of their error handling changed by a package update.
We're focused on v2 at the moment where we do plan to have support.
Great to hear! I guess v2 is still in early development, do you need some manpower?
Do you plan to use the upcoming features like typed throws?
I don't think we can make the above change because the thrown error type changes: any users catching a GRPCStatus will have the semantics of their error handling changed by a package update.
True, though the fix would be as easy as casting to GRPCStatusTransformable.
But I get it, it's better to keep the focus on v2.
Currently, the
GRPCStatus
is not related toStatus
defined in google/rpc/status.proto.According to Richer Error Model specification, the
repeated google.protobuf.Any details
fieldThis is beneficial if you want to go beyond the standard gRPC codes error model and start providing more detailed information.
Preferred solution
The
GRPCStatus
gains thedetails
field.Alternative
Since the
details
field is transported as trailing metadata:We can workaround the missing
details
field. ThetrailingMetadata
is available in all calls, for example:grpc-swift/Sources/GRPC/AsyncAwaitSupport/GRPCAsyncUnaryCall.swift
Lines 76 to 82 in 716d6d4
The only inconvenient part is that async/await wrappers do not expose it in any way.
grpc-swift/Sources/GRPC/AsyncAwaitSupport/GRPCClient+AsyncAwaitSupport.swift
Lines 158 to 178 in 716d6d4
However, the library has
GRPCStatusAndTrailers
struct that could be used here or perhaps even deeper in the codebase.grpc-swift/Sources/GRPC/GRPCStatusAndMetadata.swift
Lines 21 to 32 in 716d6d4
Then the async/await wrappers (or maybe at some lower level) instead of simply propagating the error, could transform it to status and then add metadata and throw it, something like:
The
GRPCStatusAndTrailers
could conform toGRPCStatusTransformable
for backward compatibility.This would be an easy win, and allow library users to easily obtain detailed error information.
Questions
The text was updated successfully, but these errors were encountered: