...
1 package stringsx
2
3 import (
4 "fmt"
5 "strings"
6 )
7
8 type (
9 RegisteredCases []string
10 errUnknownCase struct {
11 cases RegisteredCases
12 actual string
13 }
14 )
15
16 var ErrUnknownCase = errUnknownCase{}
17
18 func (r *RegisteredCases) AddCase(c string) string {
19 *r = append(*r, c)
20 return c
21 }
22
23 func (r *RegisteredCases) String() string {
24 s := make([]string, len(*r))
25 for i, c := range *r {
26 s[i] = fmt.Sprintf("%#v", c)
27 }
28 return "[" + strings.Join(s, ", ") + "]"
29 }
30
31 func (r *RegisteredCases) ToUnknownCaseErr(actual string) error {
32 return errUnknownCase{cases: *r, actual: actual}
33 }
34
35 func (e errUnknownCase) Error() string {
36 return fmt.Sprintf("expected one of %s but got %s", e.cases.String(), e.actual)
37 }
38
39 func (e errUnknownCase) Is(err error) bool {
40 _, ok := err.(errUnknownCase)
41 return ok
42 }
43
View as plain text