mirror of https://github.com/dmarkham/enumer.git
feat: add private meth string() returning an error
error will be passed through all the converters
This commit is contained in:
parent
5f699e34ac
commit
3a35ba062e
37
stringer.go
37
stringer.go
|
@ -774,28 +774,40 @@ func (g *Generator) buildOneRun(runs [][]Value, typeName string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Arguments to format are:
|
// Arguments to format are:
|
||||||
|
//
|
||||||
// [1]: type name
|
// [1]: type name
|
||||||
// [2]: size of index element (8 for uint8 etc.)
|
// [2]: size of index element (8 for uint8 etc.)
|
||||||
// [3]: less than zero check (for signed types)
|
// [3]: less than zero check (for signed types)
|
||||||
const stringOneRun = `func (i %[1]s) String() string {
|
const stringOneRun = `func (i %[1]s) string() (string, error) {
|
||||||
if %[3]si >= %[1]s(len(_%[1]sIndex)-1) {
|
if %[3]si >= %[1]s(len(_%[1]sIndex)-1) {
|
||||||
return fmt.Sprintf("%[1]s(%%d)", i)
|
return fmt.Sprintf("%[1]s(%%d)", i), fmt.Errorf("value is out of enum range")
|
||||||
}
|
}
|
||||||
return _%[1]sName[_%[1]sIndex[i]:_%[1]sIndex[i+1]]
|
return _%[1]sName[_%[1]sIndex[i]:_%[1]sIndex[i+1]], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i %[1]s) String() string {
|
||||||
|
val, _ := i.string()
|
||||||
|
return val
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
// Arguments to format are:
|
// Arguments to format are:
|
||||||
|
//
|
||||||
// [1]: type name
|
// [1]: type name
|
||||||
// [2]: lowest defined value for type, as a string
|
// [2]: lowest defined value for type, as a string
|
||||||
// [3]: size of index element (8 for uint8 etc.)
|
// [3]: size of index element (8 for uint8 etc.)
|
||||||
// [4]: less than zero check (for signed types)
|
// [4]: less than zero check (for signed types)
|
||||||
const stringOneRunWithOffset = `func (i %[1]s) String() string {
|
const stringOneRunWithOffset = `func(i %[1]s) string() (string, error) {
|
||||||
i -= %[2]s
|
i -= %[2]s
|
||||||
if %[4]si >= %[1]s(len(_%[1]sIndex)-1) {
|
if %[4]si >= %[1]s(len(_%[1]sIndex)-1) {
|
||||||
return fmt.Sprintf("%[1]s(%%d)", i + %[2]s)
|
return fmt.Sprintf("%[1]s(%%d)", i + %[2]s), fmt.Errorf("value is out of enum range")
|
||||||
}
|
}
|
||||||
return _%[1]sName[_%[1]sIndex[i] : _%[1]sIndex[i+1]]
|
return _%[1]sName[_%[1]sIndex[i] : _%[1]sIndex[i+1]], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i %[1]s) String() string {
|
||||||
|
val, _ := i.string()
|
||||||
|
return val
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
|
@ -820,7 +832,7 @@ func (g *Generator) buildMultipleRuns(runs [][]Value, typeName string) {
|
||||||
typeName, i, typeName, i, typeName, i)
|
typeName, i, typeName, i, typeName, i)
|
||||||
}
|
}
|
||||||
g.Printf("\tdefault:\n")
|
g.Printf("\tdefault:\n")
|
||||||
g.Printf("\t\treturn fmt.Sprintf(\"%s(%%d)\", i)\n", typeName)
|
g.Printf("\t\treturn fmt.Sprintf(\"%s(%%d)\", i)\n")
|
||||||
g.Printf("\t}\n")
|
g.Printf("\t}\n")
|
||||||
g.Printf("}\n")
|
g.Printf("}\n")
|
||||||
}
|
}
|
||||||
|
@ -861,10 +873,15 @@ func (g *Generator) buildNoOpOrderChangeDetect(runs [][]Value, typeName string)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Argument to format is the type name.
|
// Argument to format is the type name.
|
||||||
const stringMap = `func (i %[1]s) String() string {
|
const stringMap = `func (i %[1]s) string() (string, error) {
|
||||||
if str, ok := _%[1]sMap[i]; ok {
|
if str, ok := _%[1]sMap[i]; ok {
|
||||||
return str
|
return str, nil
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("%[1]s(%%d)", i)
|
return fmt.Sprintf("%[1]s(%%d)", i), fmt.Errorf("value is out of enum range")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i %[1]s) String() string {
|
||||||
|
str, _ := i.string()
|
||||||
|
return str
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
Loading…
Reference in New Issue