Skip to content

Konstantin8105/errors

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Coverage Status Go Report Card GoDoc GitHub license

errors

Create error tree.

Installation

go get -u github.com/Konstantin8105/errors

Example

type ErrorValue struct {
	ValueName string
	Reason    error
}

func (e ErrorValue) Error() string {
	return fmt.Sprintf("Value `%s`: %v", e.ValueName, e.Reason)
}

func Example() {
	// some input data
	f := math.NaN()
	i := -32
	var s string

	// checking
	var et Tree
	et.Name = "Check input data"
	if math.IsNaN(f) {
		et.Add(ErrorValue{
			ValueName: "f",
			Reason:    fmt.Errorf("is NaN"),
		})
	}
	if f < 0 {
		et.Add(fmt.Errorf("Parameter `f` is negative"))
	}
	if i < 0 {
		et.Add(fmt.Errorf("Parameter `i` is less zero"))
	}
	if s == "" {
		et.Add(fmt.Errorf("Parameter `s` is empty"))
	}

	if et.IsError() {
		fmt.Println(et.Error())
	}

	// walk
	Walk(&et, func(e error) {
		fmt.Fprintf(os.Stdout, "%-25s %v\n", fmt.Sprintf("%T", e), e)
	})

	// Output:
	// Check input data
	// ├──Value `f`: is NaN
	// ├──Parameter `i` is less zero
	// └──Parameter `s` is empty
	//
	// errors.ErrorValue         Value `f`: is NaN
	// *errors.errorString       Parameter `i` is less zero
	// *errors.errorString       Parameter `s` is empty
}

Acceptable add in error tree another error tree and possibly look like that:

+
├── Error 0
├── +
│   ├── Inside error 0
│   └── Some deep deep errors
│       └── Deep error 0
├── Error 1
├── Error 2
├── Error 3
├── +
│   ├── Inside error 0
│   ├── Some deep deep errors
│   │   └── Deep error 0
│   └── Inside error 1
├── Error 4
├── Error 5
├── Error 6
├── +
│   ├── Inside error 0
│   ├── Some deep deep errors
│   │   └── Deep error 0
│   ├── Inside error 1
│   ├── Inside error 2
│   └── Some deep deep errors
│       ├── Deep error 0
│       └── Deep error 1
├── Error 7
├── Error 8
├── Error 9
└── +
    ├── Inside error 0
    ├── Some deep deep errors
    │   └── Deep error 0
    ├── Inside error 1
    ├── Inside error 2
    ├── Some deep deep errors
    │   ├── Deep error 0
    │   └── Deep error 1
    └── Inside error 3