cubefs
69 строк · 1.5 Кб
1package gqlerrors2
3import (4"errors"5
6"github.com/graphql-go/graphql/language/location"7)
8
9type ExtendedError interface {10error11Extensions() map[string]interface{}12}
13
14type FormattedError struct {15Message string `json:"message"`16Locations []location.SourceLocation `json:"locations"`17Path []interface{} `json:"path,omitempty"`18Extensions map[string]interface{} `json:"extensions,omitempty"`19originalError error20}
21
22func (g FormattedError) OriginalError() error {23return g.originalError24}
25
26func (g FormattedError) Error() string {27return g.Message28}
29
30func NewFormattedError(message string) FormattedError {31err := errors.New(message)32return FormatError(err)33}
34
35func FormatError(err error) FormattedError {36switch err := err.(type) {37case FormattedError:38return err39case *Error:40ret := FormattedError{41Message: err.Error(),42Locations: err.Locations,43Path: err.Path,44originalError: err,45}46if err := err.OriginalError; err != nil {47if extended, ok := err.(ExtendedError); ok {48ret.Extensions = extended.Extensions()49}50}51return ret52case Error:53return FormatError(&err)54default:55return FormattedError{56Message: err.Error(),57Locations: []location.SourceLocation{},58originalError: err,59}60}61}
62
63func FormatErrors(errs ...error) []FormattedError {64formattedErrors := []FormattedError{}65for _, err := range errs {66formattedErrors = append(formattedErrors, FormatError(err))67}68return formattedErrors69}
70