diff --git a/go/errorutil/errors.go b/go/errorutil/errors.go index 5a9988f8..4926a72e 100644 --- a/go/errorutil/errors.go +++ b/go/errorutil/errors.go @@ -97,6 +97,11 @@ func PermissionDenied(format string, args ...any) error { return connect.NewError(connect.CodePermissionDenied, fmt.Errorf(format, args...)) } +// Unimplemented creates a new Unimplemented error (Connect Code 12) with a formatted error message. +func Unimplemented(format string, args ...any) error { + return connect.NewError(connect.CodeUnimplemented, fmt.Errorf(format, args...)) +} + // NewNotFound creates a new Not Found error (Connect Code 5) from an underlying error. func NewNotFound(err error) error { return connect.NewError(connect.CodeNotFound, err) @@ -142,6 +147,11 @@ func NewPermissionDenied(err error) error { return connect.NewError(connect.CodePermissionDenied, err) } +// NewUnimplemented creates a new Unimplemented error (Connect Code 12) from an underlying error. +func NewUnimplemented(err error) error { + return connect.NewError(connect.CodeUnimplemented, err) +} + // IsNotFound reports whether the error is a Not Found error (Connect Code 5). func IsNotFound(err error) bool { connectErr := Convert(err) @@ -196,6 +206,12 @@ func IsPermissionDenied(err error) bool { return connectErr.Code() == connect.CodePermissionDenied } +// IsUnimplemented reports whether the error is a Unimplemented error (Connect Code 12). +func IsUnimplemented(err error) bool { + connectErr := Convert(err) + return connectErr.Code() == connect.CodeUnimplemented +} + // WrapConnectErr wraps the error into a connect.Error with the given code if it is not already a connect.Error. // If the error is already a *connect.Error, it returns it unchanged. func WrapConnectErr(c connect.Code, underlying error) *connect.Error { diff --git a/go/errorutil/errors_test.go b/go/errorutil/errors_test.go index 6869cff0..ca3134bf 100644 --- a/go/errorutil/errors_test.go +++ b/go/errorutil/errors_test.go @@ -76,6 +76,11 @@ func TestIsErrFns(t *testing.T) { errFn: IsUnauthenticated, code: connect.CodeUnauthenticated, }, + { + name: "unimplemented", + errFn: IsUnimplemented, + code: connect.CodeUnimplemented, + }, } { tests := []struct { name string