-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patherrors.go
69 lines (59 loc) · 1.91 KB
/
errors.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package musly
import (
"errors"
"fmt"
"strings"
)
var (
// ErrMissingTrack is returned when a TrackID given does not exist
ErrMissingTrack = errors.New("musly: missing track")
// ErrInvalidInput is returned when invalid arguments are passed
ErrInvalidInput = errors.New("musly: invalid input")
// ErrUnknown is returned when an unknown error is encountered
ErrUnknown = errors.New("musly: unknown error")
// ErrAnalyze is returned when analyzing of a track fails
ErrAnalyze = errors.New("musly: analyze failure")
// ErrInvalidDatabase is returned when an invalid state has occured in the
// bolt database
ErrInvalidDatabase = errors.New("musly: database error")
)
// Error returned by this package that contains extra information
type Error struct {
Err error
Info string
IDs []TrackID
}
func (e Error) Error() string {
if e.Info != "" && len(e.IDs) > 0 {
ids := buildString(e.IDs)
return fmt.Sprintf("%s: %s: %s", e.Err.Error(), e.Info, ids)
} else if e.Info != "" {
return fmt.Sprintf("%s: %s", e.Err.Error(), e.Info)
} else if len(e.IDs) > 0 {
ids := buildString(e.IDs)
return fmt.Sprintf("%s: %s", e.Err.Error(), ids)
}
return e.Err.Error()
}
// IsMissingTrack returns true if the error given is an ErrMissingTrack
func IsMissingTrack(err error) bool {
e, ok := err.(*Error)
return err == ErrMissingTrack || (ok && e.Err == ErrMissingTrack)
}
// IsInvalidInput returns true if the error given is an ErrInvalidInput
func IsInvalidInput(err error) bool {
e, ok := err.(*Error)
return err == ErrInvalidInput || (ok && e.Err == ErrInvalidInput)
}
// IsInvalidDatabase returns true if the error given is an ErrInvalidDatabase
func IsInvalidDatabase(err error) bool {
e, ok := err.(*Error)
return err == ErrInvalidDatabase || (ok && e.Err == ErrInvalidDatabase)
}
func buildString(ids []TrackID) string {
var b strings.Builder
for i := range ids {
fmt.Fprintf(&b, "%d ", ids[i])
}
return b.String()
}