Initial commit
This commit is contained in:
147
vendor/github.com/distatus/battery/errors.go
generated
vendored
Normal file
147
vendor/github.com/distatus/battery/errors.go
generated
vendored
Normal file
@@ -0,0 +1,147 @@
|
||||
// battery
|
||||
// Copyright (C) 2016-2017 Karol 'Kenji Takahashi' Woźniak
|
||||
//
|
||||
// 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 battery
|
||||
|
||||
import "fmt"
|
||||
|
||||
// ErrNotFound variable represents battery not found error.
|
||||
//
|
||||
// Only ever returned wrapped in ErrFatal.
|
||||
var ErrNotFound = fmt.Errorf("Not found")
|
||||
|
||||
// ErrAllNotNil variable says that backend returned ErrPartial with
|
||||
// all fields having not nil values, hence it was converted to ErrFatal.
|
||||
//
|
||||
// Only ever returned wrapped in ErrFatal.
|
||||
var ErrAllNotNil = fmt.Errorf("All fields had not nil errors")
|
||||
|
||||
// ErrFatal type represents a fatal error.
|
||||
//
|
||||
// It indicates that either the library was not able to perform some kind
|
||||
// of operation critical to retrieving any data, or all partials have failed at
|
||||
// once (which would be equivalent to returning a ErrPartial with no nils).
|
||||
//
|
||||
// As such, the caller should assume that no meaningful data was
|
||||
// returned alongside the error and act accordingly.
|
||||
type ErrFatal struct {
|
||||
Err error // The actual error that happened.
|
||||
}
|
||||
|
||||
func (f ErrFatal) Error() string {
|
||||
return fmt.Sprintf("Could not retrieve battery info: `%s`", f.Err)
|
||||
}
|
||||
|
||||
// ErrPartial type represents a partial error.
|
||||
//
|
||||
// It indicates that there were problems retrieving some of the data,
|
||||
// but some was also retrieved successfully.
|
||||
// If there would be all nils, nil is returned instead.
|
||||
// If there would be all not nils, ErrFatal is returned instead.
|
||||
//
|
||||
// The fields represent fields in the Battery type.
|
||||
type ErrPartial struct {
|
||||
State error
|
||||
Current error
|
||||
Full error
|
||||
Design error
|
||||
ChargeRate error
|
||||
Voltage error
|
||||
DesignVoltage error
|
||||
}
|
||||
|
||||
func (p ErrPartial) Error() string {
|
||||
if p.isNil() {
|
||||
return "{}"
|
||||
}
|
||||
errors := map[string]error{
|
||||
"State": p.State,
|
||||
"Current": p.Current,
|
||||
"Full": p.Full,
|
||||
"Design": p.Design,
|
||||
"ChargeRate": p.ChargeRate,
|
||||
"Voltage": p.Voltage,
|
||||
"DesignVoltage": p.DesignVoltage,
|
||||
}
|
||||
keys := []string{"State", "Current", "Full", "Design", "ChargeRate", "Voltage", "DesignVoltage"}
|
||||
s := "{"
|
||||
for _, name := range keys {
|
||||
err := errors[name]
|
||||
if err != nil {
|
||||
s += fmt.Sprintf("%s:%s ", name, err.Error())
|
||||
}
|
||||
}
|
||||
return s[:len(s)-1] + "}"
|
||||
}
|
||||
|
||||
func (p ErrPartial) isNil() bool {
|
||||
return p.State == nil &&
|
||||
p.Current == nil &&
|
||||
p.Full == nil &&
|
||||
p.Design == nil &&
|
||||
p.ChargeRate == nil &&
|
||||
p.Voltage == nil &&
|
||||
p.DesignVoltage == nil
|
||||
}
|
||||
|
||||
func (p ErrPartial) noNil() bool {
|
||||
return p.State != nil &&
|
||||
p.Current != nil &&
|
||||
p.Full != nil &&
|
||||
p.Design != nil &&
|
||||
p.ChargeRate != nil &&
|
||||
p.Voltage != nil &&
|
||||
p.DesignVoltage != nil
|
||||
}
|
||||
|
||||
// Errors type represents an array of ErrFatal, ErrPartial or nil values.
|
||||
//
|
||||
// Can only possibly be returned by GetAll() call.
|
||||
type Errors []error
|
||||
|
||||
func (e Errors) Error() string {
|
||||
s := "["
|
||||
for _, err := range e {
|
||||
if err != nil {
|
||||
s += err.Error() + " "
|
||||
}
|
||||
}
|
||||
if len(s) > 1 {
|
||||
s = s[:len(s)-1]
|
||||
}
|
||||
return s + "]"
|
||||
}
|
||||
|
||||
func wrapError(err error) error {
|
||||
if perr, ok := err.(ErrPartial); ok {
|
||||
if perr.isNil() {
|
||||
return nil
|
||||
}
|
||||
if perr.noNil() {
|
||||
return ErrFatal{ErrAllNotNil}
|
||||
}
|
||||
return perr
|
||||
}
|
||||
if err != nil {
|
||||
return ErrFatal{err}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user