Skip to content

Commit 8b65137

Browse files
committed
feat: GRPC error handling w/status code errdetails packages
1 parent d8ebac7 commit 8b65137

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

api/v1/error.go

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package log_v1
2+
3+
import (
4+
"fmt"
5+
6+
"google.golang.org/genproto/googleapis/rpc/errdetails"
7+
"google.golang.org/grpc/status"
8+
)
9+
10+
type ErrOffsetOutOfRange struct {
11+
Offset uint64
12+
}
13+
14+
func (e ErrOffsetOutOfRange) GRPCStatus() *status.Status {
15+
st := status.New(codes.OutOfRange, fmt.Sprintf("offset out of range: %d", e.Offset))
16+
msg := fmt.Sprintf(
17+
Field: "offset",
18+
Description: fmt.Sprintf("The requested offset is outside the log's range: %d", e.Offset),
19+
)
20+
d := &errdetails.LocalizedMessage{
21+
Locale: "en-US",
22+
Message: msg,
23+
}
24+
std, err := st.WithDetails(d)
25+
if err != nil {
26+
return st
27+
}
28+
return std
29+
}
30+
func (e ErrOffsetOutOfRange) Error() string {
31+
return e.GRPCStatus().Err().Error()
32+
}

0 commit comments

Comments
 (0)