toRPCErr converts an error into an error from the status package.
(err error)
| 1131 | |
| 1132 | // toRPCErr converts an error into an error from the status package. |
| 1133 | func toRPCErr(err error) error { |
| 1134 | switch err { |
| 1135 | case nil, io.EOF: |
| 1136 | return err |
| 1137 | case context.DeadlineExceeded: |
| 1138 | return errContextDeadline |
| 1139 | case context.Canceled: |
| 1140 | return errContextCanceled |
| 1141 | case io.ErrUnexpectedEOF: |
| 1142 | return status.Error(codes.Internal, err.Error()) |
| 1143 | } |
| 1144 | |
| 1145 | switch e := err.(type) { |
| 1146 | case transport.ConnectionError: |
| 1147 | return status.Error(codes.Unavailable, e.Desc) |
| 1148 | case *transport.NewStreamError: |
| 1149 | return toRPCErr(e.Err) |
| 1150 | } |
| 1151 | |
| 1152 | if _, ok := status.FromError(err); ok { |
| 1153 | return err |
| 1154 | } |
| 1155 | |
| 1156 | return status.Error(codes.Unknown, err.Error()) |
| 1157 | } |
| 1158 | |
| 1159 | // setCallInfoCodec should only be called after CallOptions have been applied. |
| 1160 | func setCallInfoCodec(c *callInfo) error { |