diff --git a/api/v1/error.go b/api/v1/error.go new file mode 100644 index 0000000..8a6d695 --- /dev/null +++ b/api/v1/error.go @@ -0,0 +1,38 @@ +package log_v1 + +import ( + "fmt" + + "google.golang.org/genproto/googleapis/rpc/errdetails" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +type ErrOffsetOutOfRange struct { + Offset uint64 +} + +func (e ErrOffsetOutOfRange) GRPCStatus() *status.Status { + st := status.New( + codes.NotFound, + fmt.Sprintf("offset out of range %d", e.Offset), + ) + msg := fmt.Sprintf("The requested offset is outside the log's range: %d", + e.Offset, + ) + + d := &errdetails.LocalizedMessage{ + Locale: "en-US", + Message: msg, + } + + std, err := st.WithDetails(d) + if err != nil { + return st + } + return std +} + +func (e ErrOffsetOutOfRange) Error() string { + return e.GRPCStatus().Err().Error() +}