From 611de5f9fd809b22d33ff9094c4d2f8426b6dac0 Mon Sep 17 00:00:00 2001 From: Alex Shtin Date: Tue, 31 Mar 2020 16:01:58 -0700 Subject: [PATCH] Add Unimplemented error (#5) --- serviceerror/convert.go | 3 +- serviceerror/unimplemented.go | 63 +++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 serviceerror/unimplemented.go diff --git a/serviceerror/convert.go b/serviceerror/convert.go index 87d86508..5b90224b 100644 --- a/serviceerror/convert.go +++ b/serviceerror/convert.go @@ -77,12 +77,13 @@ func FromStatus(st *status.Status) error { return newCanceled(st) case codes.Unavailable: return newUnavailable(st) + case codes.Unimplemented: + return newUnimplemented(st) case codes.Unknown: // Unwrap error message from unknown error. return errors.New(st.Message()) // Unsupported codes. case codes.OutOfRange, - codes.Unimplemented, codes.Unauthenticated: // Use standard gRPC error representation for unsupported codes ("rpc error: code = %s desc = %s"). return st.Err() diff --git a/serviceerror/unimplemented.go b/serviceerror/unimplemented.go new file mode 100644 index 00000000..e6d926da --- /dev/null +++ b/serviceerror/unimplemented.go @@ -0,0 +1,63 @@ +// The MIT License (MIT) +// +// Copyright (c) 2020 Temporal Technologies, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +package serviceerror + +import ( + "github.com/gogo/status" + "google.golang.org/grpc/codes" +) + +type ( + // Unimplemented represents unimplemented error. + Unimplemented struct { + Message string + st *status.Status + } +) + +// NewUnimplemented returns new Unimplemented error. +func NewUnimplemented(message string) *Unimplemented { + return &Unimplemented{ + Message: message, + } +} + +// Error returns string message. +func (e *Unimplemented) Error() string { + return e.Message +} + +func (e *Unimplemented) status() *status.Status { + if e.st != nil{ + return e.st + } + + return status.New(codes.Unimplemented, e.Message) +} + +func newUnimplemented(st *status.Status) *Unimplemented { + return &Unimplemented{ + Message: st.Message(), + st: st, + } +}