cubefs

Форк
0
69 строк · 1.5 Кб
1
package gqlerrors
2

3
import (
4
	"errors"
5

6
	"github.com/graphql-go/graphql/language/location"
7
)
8

9
type ExtendedError interface {
10
	error
11
	Extensions() map[string]interface{}
12
}
13

14
type FormattedError struct {
15
	Message       string                    `json:"message"`
16
	Locations     []location.SourceLocation `json:"locations"`
17
	Path          []interface{}             `json:"path,omitempty"`
18
	Extensions    map[string]interface{}    `json:"extensions,omitempty"`
19
	originalError error
20
}
21

22
func (g FormattedError) OriginalError() error {
23
	return g.originalError
24
}
25

26
func (g FormattedError) Error() string {
27
	return g.Message
28
}
29

30
func NewFormattedError(message string) FormattedError {
31
	err := errors.New(message)
32
	return FormatError(err)
33
}
34

35
func FormatError(err error) FormattedError {
36
	switch err := err.(type) {
37
	case FormattedError:
38
		return err
39
	case *Error:
40
		ret := FormattedError{
41
			Message:       err.Error(),
42
			Locations:     err.Locations,
43
			Path:          err.Path,
44
			originalError: err,
45
		}
46
		if err := err.OriginalError; err != nil {
47
			if extended, ok := err.(ExtendedError); ok {
48
				ret.Extensions = extended.Extensions()
49
			}
50
		}
51
		return ret
52
	case Error:
53
		return FormatError(&err)
54
	default:
55
		return FormattedError{
56
			Message:       err.Error(),
57
			Locations:     []location.SourceLocation{},
58
			originalError: err,
59
		}
60
	}
61
}
62

63
func FormatErrors(errs ...error) []FormattedError {
64
	formattedErrors := []FormattedError{}
65
	for _, err := range errs {
66
		formattedErrors = append(formattedErrors, FormatError(err))
67
	}
68
	return formattedErrors
69
}
70

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.