errors

package module
v1.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 22, 2022 License: Apache-2.0 Imports: 14 Imported by: 5

README

Errors

codecov Go Report Card Go Reference license

Package errors implements custom functions to manipulate errors.

In this package uses the strategy accepted in the github.com/pkg/errors and in the whole of golang. It is compatible with the standard `errors ' package.

See README russian.

Documentation

Overview

Package errors кастомная реализация управления жизненным циклом ошибки. Кроме стандартных свойств и методов реализовано логгирование, HTTP и GRCP статусы, перевод сообщения. Ошибка включает в себя свойства: сообщение, тип, операция, контест.

Index

Examples

Constants

View Source
const (

	// Неизвестный тип ошибки. Дефолтное значение.
	Unknown errType

	// Internal внутренняя системная ошибка. Например, отказ базы данных.
	Internal

	// Validation ошибка валидации. Например, не корректный email-адрес.
	Validation

	// InputBody ошибка обработки входных данных. Например, ошибка сериализации JSON.
	InputBody

	// Duplicate дубликат данных, нарушения уникальности.
	Duplicate

	// Unauthenticated для выполнения запроса требуется аутентфиикация.
	Unauthenticated

	// Unauthorized доступ запрещен, запрос не авторизован.
	Unauthorized

	// Empty запрос или не ответ не должен быть пустым.
	Empty

	// NotFound запрашиваемые данные не найдены. Например, пользователь с заданным ID не найден.
	NotFound

	// MaximumAttempts превышение числе разрешенных попуток выполнения одного и того же действия.
	MaximumAttempts

	// SubscriptionExpired срок действия "оплаченой" подписки истек.
	SubscriptionExpired

	// DownstreamDependencyTimedout время ожидания выполнения запрос к нижестоящему сервису истек.
	DownstreamDependencyTimedout

	// Unavailable сервис не доступен.
	Unavailable
)

Variables

View Source
var (
	ErrNoLocalizer = New("localizer is no set")
	ErrNotError    = New("not *Error")
)
View Source
var (
	// DefaultCaller is a Valuer that returns then CallInfo where the Log
	// method was invoked. It can only be used with log.With.
	DefaultCaller = Caller(DefaultCallDepth) //nolint:gochecknoglobals

	RuntimeCaller = Caller(RuntimeCallDepth) //nolint:gochecknoglobals

	HandlerCaller = Caller(HandlerCallDepth) //nolint:gochecknoglobals
)
View Source
var DefaultMarshaller = &MarshalString{} //nolint:gochecknoglobals
View Source
var (
	ErrUnknownMarshaller = New("marshaller not set")
)
View Source
var (
	ErrUnknownType = New("unknown type")
)

Functions

func As

func As(err error, target interface{}) bool

As обнаруживает ошибку err, соответствующую типу target и устанавливает target в найденное значение.

func Caller

func Caller(skip CallDepth) func() string

Caller returns a Valuer that returns a CallInfo from a specified depth in the callstack. Users will probably want to use DefaultCaller.

Example
package main

import (
	"fmt"
	"time"

	"github.com/ovsinc/errors"
)

func someErrWithTimedCall() error {
	err := errors.NewWith(
		errors.SetMsg("some call"),
		errors.AppendContextInfo("call", errors.RuntimeCaller()),
		errors.AppendContextInfo("duration", time.Second),
	)
	time.Sleep(1 * time.Second)
	return err
}

func main() {
	err := someErrWithTimedCall()

	fmt.Printf("%s\n", err.Error())

}
Output:

{call:example_test.go:306: ExampleCaller(),duration:1s} some call

func Combine

func Combine(errors ...error) error

Combine создаст цепочку ошибок из ошибок ...errors. Допускается использование `nil` в аргументах.

Example
package main

import (
	"fmt"

	"github.com/ovsinc/errors"
)

func itsOk() error {
	return nil
}

func itsErr(s string) error {
	return errors.New(s)
}

func main() {
	e := errors.Combine(
		nil,
		itsOk(),
		itsErr("one"),
		itsErr("two"),
		itsOk(),
	)
	fmt.Println(e)

}
Output:

the following errors occurred:
	#1 one
	#2 two

func CombineWithLog

func CombineWithLog(errs ...error) error

CombineWithLog как и Combine создаст или дополнит цепочку ошибок err с помощью errs, но при этом будет осуществлено логгирование с помощь логгера по-умолчанию.

Example

Добавление ошибок в mutierror с логгированием тут изменена функция форматирования вывода -- используется json

package main

import (
	"log"
	"os"

	"github.com/ovsinc/multilog/golog"

	"github.com/ovsinc/errors"
)

func itsOk() error {
	return nil
}

func itsErr(s string) error {
	return errors.New(s)
}

func main() {
	errors.DefaultLogger = golog.New(log.New(os.Stdout, "ovsinc/errors ", 0))

	_ = errors.CombineWithLog(
		nil,
		itsOk(),
		itsErr("one"),
		itsErr("two"),
		itsOk(),
	)

}
Output:

ovsinc/errors the following errors occurred:
	#1 one
	#2 two

func Contains

func Contains(err error, fn func(error) bool) bool

Contains проверит есть ли в цепочке целевая ошибка. Допускается в качестве аргумента err указывать одиночную ошибку.

func ContainsByErr added in v1.3.0

func ContainsByErr(err error, target error) bool

ContainsByErr проверит есть ли в цепочке ошибка. Допускается в качестве аргумента err указывать одиночную ошибку.

func ContainsByID added in v1.3.0

func ContainsByID(err error, id string) bool

ContainsByID проверит есть ли в цепочке ошибка с указанным ID. Допускается в качестве аргумента err указывать одиночную ошибку.

func DefaultTranslate added in v1.3.0

func DefaultTranslate(e error) string

func Find added in v1.3.0

func Find(err error, fn func(error) bool) error

func FindByErr added in v1.3.0

func FindByErr(err error, target error) error

FindByErr вернет ошибку (*Error) соответсвующую target или nil. Если ошибка не найдена, вернется nil.

func FindByID added in v1.3.0

func FindByID(err error, id string) error

FindByID вернет ошибку (*Error) с указанным ID. Если ошибка с указанным ID не найдена, вернется nil.

func GRPCStatusCode added in v1.3.0

func GRPCStatusCode(err error) (codes.Code, bool)

GRPCStatusCode получить gRPC статус из error. * in: error * out: t codes.Code, ok bool Если error кастится на (*Error), то ok == true, и возвращается значение codes.Code, соответсвующее errType. В противном случае возвращается codes.Unknown и false.

func GRPCStatusCodeMessage added in v1.3.0

func GRPCStatusCodeMessage(err error) (codes.Code, string, bool)

GRPCStatusCodeMessage получить gRPC статус из error. * in: error * out: t codes.Code, s string, ok bool Если error кастится на (*Error), то ok == true, возвращается значение t, соответсвующее errType и текстовое предсталение errType. В противном случае возвращается codes.Unknown, "Unknown", false.

func GetID

func GetID(err error) string

GetID возвращает ID ошибки. Для НЕ *Error всегда будет "".

func GetOperation added in v1.3.0

func GetOperation(err error) string

GetOperation возвращает операцию ошибки. Для НЕ *Error всегда будет "".

func HTTPStatusCode added in v1.3.0

func HTTPStatusCode(err error) (int, bool)

HTTPStatusCode получить HTTP статус из error. * in: error * out: t int, ok bool Если error кастится на (*Error), то ok == true, и возвращается значение, соответсвующее errType. В противном случае возвращается http.StatusTeapot и false.

func HTTPStatusCodeMessage added in v1.3.0

func HTTPStatusCodeMessage(err error) (int, string, bool)

HTTPStatusCodeMessage получить HTTP статус из error. * in: error * out: t int, s string, ok bool Если error кастится на (*Error), то ok == true, возвращается значение t, соответсвующее errType и текстовое предсталение errType. В противном случае возвращается http.StatusTeapot, "Unknown", false.

func Is

func Is(err, target error) bool

Is сообщает, соответствует ли ошибка err target-ошибке. Для multierr будет производится поиск в цепочке.

func Log

func Log(err error, lg ...Logger)

Log выполнить логгирование ошибки err с ипользованием логгера l[0]. Если l не указан, то в качестве логгера будет использоваться логгер по-умолчанию.

Example
package main

import (
	"log"
	"os"

	"github.com/ovsinc/multilog/golog"

	"github.com/ovsinc/errors"
)

func main() {
	errors.DefaultLogger = golog.New(log.New(os.Stdout, "ovsinc/errors ", 0))

	errors.Log(errors.New("hello world"))

}
Output:

ovsinc/errors hello world

func StatusMessage added in v1.3.0

func StatusMessage(err error) (string, bool)

StatusMessage получить строковое описание errType из error. * in: error * out: s string, ok bool Если error кастится на (*Error), то ok == true, возвращается значение t, соответсвующее errType и текстовое предсталение errType. В противном случае возвращается "Unknown", false.

func Translate added in v1.3.0

func Translate(e error, l Localizer, tctx *TranslateContext) (string, error)

Translate вернет перевод сообщения ошибки. Если не удастся выполнить перевод, вернет оригинальное сообщение.

Example
package main

import (
	"fmt"

	"github.com/BurntSushi/toml"
	i18n "github.com/nicksnyder/go-i18n/v2/i18n"
	"golang.org/x/text/language"

	"github.com/ovsinc/errors"
)

func localizePrepare() *i18n.Localizer {
	bundle := i18n.NewBundle(language.English)
	bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal)
	bundle.MustLoadMessageFile("./_examples/translate/testdata/active.ru.toml")

	return i18n.NewLocalizer(bundle, "es", "ru", "en")
}

func localTransContext() errors.TranslateContext {
	var (
		unreadEmailCount = 5
		name             = "John Snow"
	)

	return errors.TranslateContext{
		TemplateData: map[string]interface{}{
			"Name":        name,
			"PluralCount": unreadEmailCount,
		},
		PluralCount: unreadEmailCount,
	}
}

func main() {
	errEmailsUnreadMsg := localTransContext()
	localizer := localizePrepare()

	e1 := errors.NewWith(
		errors.SetMsg("fallback message"),
		errors.SetID("ErrEmailsUnreadMsg"),
	)

	errors.DefaultLocalizer = localizePrepare()
	defer func() {
		errors.DefaultLocalizer = nil
	}()

	msg, _ := errors.Translate(e1, localizer, &errEmailsUnreadMsg)
	fmt.Println(msg)

	msg, _ = errors.Translate(e1, nil, &errEmailsUnreadMsg)
	fmt.Println(msg)

	eunknown := errors.NewWith(
		errors.SetMsg("fallback unknown message"),
		errors.SetID("ErrUnknownErrorMsg"),
	)

	fmt.Printf("%+s\n", eunknown)

}
Output:

У John Snow имеется 5 непрочитанных сообщений.
У John Snow имеется 5 непрочитанных сообщений.
Неизвестная ошибка

func Unwrap

func Unwrap(err error) error

func Wrap

func Wrap(left error, right error) error

Wrap обернет ошибку `left` ошибкой `right`, получив цепочку. Допускается использование `nil` в одном из аргументов.

Example
package main

import (
	"fmt"

	stderrors "errors"

	"github.com/ovsinc/errors"
)

func someFuncWithErr() error {
	return errors.NewWith(
		errors.SetMsg("connection error"),
		errors.SetContextInfo(errors.CtxKV{{"hello", "world"}}),
		errors.SetOperation("write"),
		errors.SetID("someid"),
	)
}

func someFuncWithErr2() error {
	return errors.New(
		"connection error",
	)
}

func main() {
	e := stderrors.New("hello world")

	err := someFuncWithErr()
	err = errors.Wrap(err, someFuncWithErr2())
	err = errors.Wrap(err, e)

	fmt.Printf("%v", err)

	oneErr := errors.FindByID(err, "someid")

	fmt.Printf(
		"err with id 'someid': %v; id: %s; op: %s\n",
		oneErr,
		errors.GetID(oneErr),
		errors.GetOperation(oneErr),
	)

	fmt.Println(errors.FindByErr(err, e))

}
Output:

the following errors occurred:
	#1 [write] {hello:world} connection error
	#2 connection error
	#3 hello world
err with id 'someid': [write] {hello:world} connection error; id: someid; op: write
hello world

func WrapWithLog

func WrapWithLog(olderr error, err error) error

WrapWithLog обернет ошибку olderr в err и вернет цепочку, но при этом будет осуществлено логгирование с помощь логгера по-умолчанию.

Types

type CallDepth added in v1.3.0

type CallDepth int
const (
	DefaultCallDepth CallDepth = 3
	RuntimeCallDepth CallDepth = 2
	HandlerCallDepth CallDepth = 1
)

type CtxKV added in v1.3.0

type CtxKV []struct {
	Key   string
	Value interface{}
}

CtxKV slice key-value контекста ошибки.

type Error

type Error struct {
	// contains filtered or unexported fields
}

Error структура кастомной ошибки.

func Cast

func Cast(err error) (*Error, bool)

Cast преобразует тип error в *Error Если error не соответствует *Error, то будет создан *Error с сообщением err.Error(). Для err == nil, вернется nil.

func DownstreamDependencyTimedoutErr added in v1.3.0

func DownstreamDependencyTimedoutErr(s string) *Error

Конструктор *Error c типом DownstreamDependencyTimedout. * s string -- сообщение ошибки. ** *Error

Example
package main

import (
	"fmt"

	"github.com/ovsinc/errors"
)

func main() {
	e := errors.DownstreamDependencyTimedoutErr("hello")

	fmt.Printf("%q\n", e)
	fmt.Printf("%v\n", e)

}
Output:

id: operation: error_type:DownstreamDependencyTimedout context_info: message:hello
(DownstreamDependencyTimedout) hello

func DownstreamDependencyTimedoutErrWith added in v1.3.0

func DownstreamDependencyTimedoutErrWith(ops ...Options) *Error

Конструктор *Error c типом DownstreamDependencyTimedout. * ops ...Options -- параметризация через функции-парметры. ** *Error

func DuplicateErr added in v1.3.0

func DuplicateErr(s string) *Error

Конструктор *Error c типом Duplicate. * s string -- сообщение ошибки. ** *Error

func DuplicateErrWith added in v1.3.0

func DuplicateErrWith(ops ...Options) *Error

Конструктор *Error c типом Duplicate. * ops ...Options -- параметризация через функции-парметры. ** *Error

func EmptyErr added in v1.3.0

func EmptyErr(s string) *Error

Конструктор *Error c типом Empty. * s string -- сообщение ошибки. ** *Error

func EmptyErrWith added in v1.3.0

func EmptyErrWith(ops ...Options) *Error

Конструктор *Error c типом Empty. * ops ...Options -- параметризация через функции-парметры. ** *Error

func InputBodyErr added in v1.3.0

func InputBodyErr(s string) *Error

Конструктор *Error c типом InputBody. * s string -- сообщение ошибки. ** *Error

func InputBodyErrWith added in v1.3.0

func InputBodyErrWith(ops ...Options) *Error

Конструктор *Error c типом InputBody. * ops ...Options -- параметризация через функции-парметры. ** *Error

func IternalErr added in v1.3.0

func IternalErr(s string) *Error

Конструктор *Error c типом Internal. * s string -- сообщение ошибки. ** *Error

func IternalErrWith added in v1.3.0

func IternalErrWith(ops ...Options) *Error

Конструктор *Error c типом Internal. * ops ...Options -- параметризация через функции-парметры. ** *Error

func MaximumAttemptsErr added in v1.3.0

func MaximumAttemptsErr(s string) *Error

Конструктор *Error c типом MaximumAttempts. * s string -- сообщение ошибки. ** *Error

func MaximumAttemptsErrWith added in v1.3.0

func MaximumAttemptsErrWith(ops ...Options) *Error

Конструктор *Error c типом MaximumAttempts. * ops ...Options -- параметризация через функции-парметры. ** *Error

func New

func New(i interface{}) *Error

New конструктор *Error. Аргумент используется для указания сообщения. * In: interface{} Поддерживаемые варианты для NewWith(SetMsg(msg)): string, *Error -> as is error -> Error() interface{ String() string } -> String() func() string -> f() * Out: *Error

** *Error

Example
package main

import (
	"fmt"

	"github.com/ovsinc/errors"
)

func main() {
	e := errors.New("hello world")

	fmt.Println(e.Error())

}
Output:

hello world

func NewLog added in v1.3.0

func NewLog(i interface{}) *Error

NewLog конструктор *Error, как и New, но при этом будет осуществлено логгирование с помощь логгера по-умолчанию.

Example
package main

import (
	"log"
	"os"

	"github.com/ovsinc/multilog/golog"

	"github.com/ovsinc/errors"
)

func main() {
	errors.DefaultLogger = golog.New(log.New(os.Stdout, "ovsinc/errors ", 0))

	_ = errors.NewLog("hello world")

}
Output:

ovsinc/errors hello world

func NewWith added in v1.3.0

func NewWith(ops ...Options) *Error

NewWith конструктор на необязательных параметрах * ops ...Options -- параметризация через функции-парметры. См. options.go

** *Error

Example
package main

import (
	"fmt"

	"github.com/ovsinc/errors"
)

func main() {
	e := errors.NewWith(
		errors.SetID("myid"),
		errors.SetMsg("hello"),
		errors.AppendContextInfo(
			"hello",
			[]struct{ k, v interface{} }{{"1", 1}, {"10", 11}},
		),
		errors.AppendContextInfo("Joe", "Dow"),
		errors.SetOperation("test op"),
		errors.SetErrorType(errors.InputBody),
	)

	fmt.Printf("%q\n", e)
	fmt.Printf("%v\n", e)

	fmt.Printf("%c\n", e)
	fmt.Printf("%t\n", e)
	fmt.Printf("%o\n", e)
	fmt.Printf("%s\n", e)
	fmt.Printf("%j\n", e)
	fmt.Printf("%f\n", e)

}
Output:

id:myid operation:test op error_type:InputBody context_info:hello:[{1 1} {10 11}],Joe:Dow message:hello
(InputBody) [test op] {hello:[{1 1} {10 11}],Joe:Dow} hello
hello:[{1 1} {10 11}],Joe:Dow
InputBody
test op
hello
{"id":"myid","operation":"test op","error_type":"InputBody","context":{"hello":"[{1 1} {10 11}]","Joe":"Dow"},"msg":"hello"}
example_test.go:101: ExampleNewWith()

func NewWithLog

func NewWithLog(ops ...Options) *Error

NewWithLog конструктор *Error, как и NewWith, но при этом будет осуществлено логгирование с помощь логгера по-умолчанию.

Example
package main

import (
	"log"
	"os"

	"github.com/ovsinc/multilog/golog"

	"github.com/ovsinc/errors"
)

func itsOk() error {
	return nil
}

func main() {
	errors.DefaultLogger = golog.New(log.New(os.Stdout, "ovsinc/errors ", 0))

	_ = errors.Combine(
		nil,
		itsOk(),
		errors.NewLog("one"),
		errors.NewLog("two"),
		itsOk(),
	)

	_ = errors.NewLog("three")

}
Output:

ovsinc/errors one
ovsinc/errors two
ovsinc/errors three

func NotFoundErr added in v1.3.0

func NotFoundErr(s string) *Error

Конструктор *Error c типом NotFound. * s string -- сообщение ошибки. ** *Error

func NotFoundErrWith added in v1.3.0

func NotFoundErrWith(ops ...Options) *Error

Конструктор *Error c типом NotFound. * ops ...Options -- параметризация через функции-парметры. ** *Error

func SubscriptionExpiredErr added in v1.3.0

func SubscriptionExpiredErr(s string) *Error

Конструктор *Error c типом SubscriptionExpired. * s string -- сообщение ошибки. ** *Error

func SubscriptionExpiredErrWith added in v1.3.0

func SubscriptionExpiredErrWith(ops ...Options) *Error

Конструктор *Error c типом SubscriptionExpired. * ops ...Options -- параметризация через функции-парметры. ** *Error

func UnauthenticatedErr added in v1.3.0

func UnauthenticatedErr(s string) *Error

Конструктор *Error c типом Unauthenticated. * s string -- сообщение ошибки. ** *Error

func UnauthenticatedErrWith added in v1.3.0

func UnauthenticatedErrWith(ops ...Options) *Error

Конструктор *Error c типом Unauthenticated. * ops ...Options -- параметризация через функции-парметры. ** *Error

func UnauthorizedErr added in v1.3.0

func UnauthorizedErr(s string) *Error

Конструктор *Error c типом Unauthorized. * s string -- сообщение ошибки. ** *Error

func UnauthorizedErrWith added in v1.3.0

func UnauthorizedErrWith(ops ...Options) *Error

Конструктор *Error c типом Unauthorized. * ops ...Options -- параметризация через функции-парметры. ** *Error

func UnavailableErr added in v1.3.0

func UnavailableErr(s string) *Error

Конструктор *Error c типом Unavailable. * s string -- сообщение ошибки. ** *Error

func UnavailableErrWith added in v1.3.0

func UnavailableErrWith(ops ...Options) *Error

Конструктор *Error c типом Unavailable. * ops ...Options -- параметризация через функции-парметры. ** *Error

func ValidationErr added in v1.3.0

func ValidationErr(s string) *Error

Конструктор *Error c типом Validation. * s string -- сообщение ошибки. ** *Error

func ValidationErrWith added in v1.3.0

func ValidationErrWith(ops ...Options) *Error

Конструктор *Error c типом Validation. * ops ...Options -- параметризация через функции-парметры. ** *Error

func (*Error) As

func (e *Error) As(target interface{}) bool

func (*Error) ContextInfo

func (e *Error) ContextInfo() CtxKV

ContextInfo вернет контекст CtxKV ошибки.

func (*Error) Error

func (e *Error) Error() string

Error возвращает строковое представление ошибки. Метод для реализации интерфейса error. Метод произволит перевод сообщения об ошибки, если localizer != nil. Для идентификации сообщения перевода используется ID ошибки.

func (*Error) ErrorType

func (e *Error) ErrorType() IErrType

ErrorType вернет тип ошибки.

func (*Error) Format

func (e *Error) Format(s fmt.State, verb rune)

Format производит форматирование строки, для поддержки fmt.Printf().

func (*Error) ID

func (e *Error) ID() string

ID возвращает ID ошибки.

func (*Error) Is

func (e *Error) Is(target error) bool

func (*Error) Log

func (e *Error) Log(l ...Logger)

Log выполнит логгирование ошибки с ипользованием логгера l[0]. Если l не указан, то в качестве логгера будет использоваться логгер по-умолчанию.

func (*Error) Marshal added in v1.3.0

func (e *Error) Marshal(fn ...Marshaller) ([]byte, error)

Marshal метод маршалит *Error. * fn ...Marshaller -- необязательный парамет для вызова кастомного маршалера если не указано, используется дефолтный. ** []byte, error

Example
package main

import (
	"fmt"

	"github.com/ovsinc/errors"
)

func main() {
	e := errors.NewWith(
		errors.SetID("myid"),
		errors.SetMsg("hello"),
		errors.AppendContextInfo(
			"hello",
			[]struct{ k, v interface{} }{{"1", 1}, {"10", 11}},
		),
		errors.AppendContextInfo("Joe", "Dow"),
		errors.SetOperation("test op"),
		errors.SetErrorType(errors.InputBody),
	)

	buf, _ := e.Marshal(&errors.MarshalJSON{})

	fmt.Println(string(buf))

}
Output:

{"id":"myid","operation":"test op","error_type":"InputBody","context":{"hello":"[{1 1} {10 11}]","Joe":"Dow"},"msg":"hello"}

func (*Error) Msg

func (e *Error) Msg() string

Msg возвращает исходное сообщение об ошибке.

func (*Error) Operation added in v1.3.0

func (e *Error) Operation() string

Operations вернет список операций.

func (*Error) Sdump

func (e *Error) Sdump() string

Sdump вернет текстовый дамп ошибки *Error.

func (*Error) Unwrap

func (e *Error) Unwrap() error

func (*Error) WithOptions

func (e *Error) WithOptions(ops ...Options) *Error

WithOptions производит параметризацию *Error с помощью функции-парметры Options. Допускается указывать произвольно количество ops. Возвращается новый экземпляр *Error с переопределением заданных параметров.

Example
package main

import (
	"fmt"

	"github.com/ovsinc/errors"
)

func main() {
	e1 := errors.New("hello")
	e2 := e1.WithOptions(
		errors.AppendContextInfo("hello", "world"),
		errors.SetOperation("test op"),
	)

	fmt.Println(e1.Error())
	fmt.Println(e2.Error())

}
Output:

hello
[test op] {hello:world} hello

type IErrType added in v1.3.0

type IErrType interface {
	HTTPStatusCode() int
	GRPCStatusCode() codes.Code
	Number() int
	String() string
}

func GetErrType added in v1.3.0

func GetErrType(err error) (IErrType, bool)

GetErrType получить errType из error. * in: error * out: t errType, ok bool Если error кастится на (*Error), то ok == true, и возвращается значение errType. В противном случае возвращается defaultErrType и false.

func ParseErrType added in v1.3.0

func ParseErrType(s string) IErrType

ParseErrType позволяет получить IErrType по названию.

type Localizer added in v1.3.0

type Localizer interface {
	Localize(*i18n.LocalizeConfig) (string, error)
}
var DefaultLocalizer Localizer //nolint:gochecknoglobals

DefaultLocalizer локализатор по-умолчанию. Для каждой ошибки можно переопределить локализатор.

type Logger added in v1.3.0

type Logger interface {
	Errorf(format string, args ...interface{})
}

Logger используемый в пакете интерфейс логгера.

var DefaultLogger Logger = multilog.DefaultLogger //nolint:gochecknoglobals

DefaultLogger дефолтный логгер в пакете.

type MarshalJSON added in v1.3.0

type MarshalJSON struct{}

func (*MarshalJSON) Marshal added in v1.3.0

func (m *MarshalJSON) Marshal(i interface{}) ([]byte, error)

func (MarshalJSON) MarshalTo added in v1.3.0

func (MarshalJSON) MarshalTo(i interface{}, dst io.Writer) error

type MarshalString added in v1.3.0

type MarshalString struct{}

func (*MarshalString) Marshal added in v1.3.0

func (m *MarshalString) Marshal(i interface{}) ([]byte, error)

func (*MarshalString) MarshalTo added in v1.3.0

func (m *MarshalString) MarshalTo(i interface{}, dst io.Writer) error

type Marshaller added in v1.3.0

type Marshaller interface {
	Marshal(interface{}) ([]byte, error)
	MarshalTo(interface{}, io.Writer) error
}

type Multierror

type Multierror interface {
	Errors() []error
	Error() string
	Format(f fmt.State, c rune)
	Marshal(fn ...Marshaller) ([]byte, error)
	Len() int
	Log(l ...Logger)
	Unwrap() error
	Last() error
}

func CastMultierr added in v1.3.0

func CastMultierr(err error) (Multierror, bool)

CastMultierr преобразует тип error в *Multierror Если error не соответствует Multierror, то будет создан Multierror с сообщением err.Error(). Для err == nil, вернется nil.

type Options

type Options func(e *Error)

Options опции-параметры ошибки.

func AppendContextInfo

func AppendContextInfo(key string, value interface{}) Options

AppendContextInfo, key, val - строки. Добавит в имеющийся CtxKV значение value по ключу key. CtxKV будет инициализирован, если ранее этого не было сделано.

func SetContextInfo

func SetContextInfo(ctxinf CtxKV) Options

SetContextInfo, CtxKV. Установит контекст.

func SetErrorType

func SetErrorType(et IErrType) Options

SetErrorType, IErrType (enum). Установит тип.

func SetID

func SetID(id string) Options

SetID, строка. Установит ID ошибки.

func SetMsg

func SetMsg(msg string) Options

SetMsg строка. Установит сообщение об ошибке.

func SetOperation added in v1.3.0

func SetOperation(o string) Options

SetOperation, строка. Установит имя операции.

type TranslateContext

type TranslateContext struct {
	// TemplateData - map для замены в шаблоне
	TemplateData map[string]interface{}
	// PluralCount признак множественности.
	// Может иметь значение nil или число.
	PluralCount interface{}
	// DefaultMessage сообщение, которое будет использовано при ошибке перевода.
	DefaultMessage *i18n.Message
}

TranslateContext контекст перевода. Не является обязательным для корректного перевода.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL