forked from mirror/enumer
Add whitespace-separated transformation
This commit is contained in:
parent
d6fc475549
commit
6ec30747dc
|
@ -29,6 +29,7 @@ When Enumer is applied to a type, it will generate:
|
||||||
- When the flag `sql` is provided, the methods for implementing the Scanner and Valuer interfaces will be also generated.
|
- When the flag `sql` is provided, the methods for implementing the Scanner and Valuer interfaces will be also generated.
|
||||||
Useful when storing the enum in a database.
|
Useful when storing the enum in a database.
|
||||||
|
|
||||||
|
|
||||||
For example, if we have an enum type called `Pill`,
|
For example, if we have an enum type called `Pill`,
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
@ -120,7 +121,7 @@ name := MyTypeValue.String() // name => "MyTypeValue"
|
||||||
|
|
||||||
Sometimes you need to use some other string representation format than CamelCase (i.e. in JSON).
|
Sometimes you need to use some other string representation format than CamelCase (i.e. in JSON).
|
||||||
|
|
||||||
To transform it from CamelCase to snake_case or kebab-case, you can use the `transform` flag.
|
To transform it from CamelCase to another format, you can use the `transform` flag.
|
||||||
|
|
||||||
For example, the command `enumer -type=MyType -json -transform=snake` would generate the following string representation:
|
For example, the command `enumer -type=MyType -json -transform=snake` would generate the following string representation:
|
||||||
|
|
||||||
|
@ -128,7 +129,7 @@ For example, the command `enumer -type=MyType -json -transform=snake` would gene
|
||||||
name := MyTypeValue.String() // name => "my_type_value"
|
name := MyTypeValue.String() // name => "my_type_value"
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note**: The transformation only works form CamelCase to snake_case or kebab-case, not the other way around.
|
**Note**: The transformation only works from CamelCase to snake_case or kebab-case, not the other way around.
|
||||||
|
|
||||||
### Transformers
|
### Transformers
|
||||||
|
|
||||||
|
@ -142,6 +143,7 @@ name := MyTypeValue.String() // name => "my_type_value"
|
||||||
- first (Use first character of string)
|
- first (Use first character of string)
|
||||||
- first-lower (same as first only lower case)
|
- first-lower (same as first only lower case)
|
||||||
- first-upper (same as first only upper case)
|
- first-upper (same as first only upper case)
|
||||||
|
- whitespace
|
||||||
|
|
||||||
## How to use
|
## How to use
|
||||||
|
|
||||||
|
@ -152,7 +154,7 @@ There are four boolean flags: `json`, `text`, `yaml` and `sql`. You can use any
|
||||||
|
|
||||||
For enum string representation transformation the `transform` and `trimprefix` flags
|
For enum string representation transformation the `transform` and `trimprefix` flags
|
||||||
were added (i.e. `enumer -type=MyType -json -transform=snake`).
|
were added (i.e. `enumer -type=MyType -json -transform=snake`).
|
||||||
Possible transform values are `snake` and `kebab` for transformation to snake_case and kebab-case accordingly.
|
Possible transform values are listed above in the [transformers](#transformers) section.
|
||||||
The default value for `transform` flag is `noop` which means no transformation will be performed.
|
The default value for `transform` flag is `noop` which means no transformation will be performed.
|
||||||
|
|
||||||
If a prefix is provided via the `trimprefix` flag, it will be trimmed from the start of each name (before
|
If a prefix is provided via the `trimprefix` flag, it will be trimmed from the start of each name (before
|
||||||
|
|
|
@ -93,6 +93,9 @@ func TestEndToEnd(t *testing.T) {
|
||||||
case "transform_first_lower.go":
|
case "transform_first_lower.go":
|
||||||
typeName = "FirstLowerCaseValue"
|
typeName = "FirstLowerCaseValue"
|
||||||
transformNameMethod = "first-lower"
|
transformNameMethod = "first-lower"
|
||||||
|
case "transform_whitespace.go":
|
||||||
|
typeName = "WhitespaceSeparatedValue"
|
||||||
|
transformNameMethod = "whitespace"
|
||||||
default:
|
default:
|
||||||
typeName = fmt.Sprintf("%c%s", name[0]+'A'-'a', name[1:len(name)-len(".go")])
|
typeName = fmt.Sprintf("%c%s", name[0]+'A'-'a', name[1:len(name)-len(".go")])
|
||||||
transformNameMethod = "noop"
|
transformNameMethod = "noop"
|
||||||
|
|
|
@ -286,6 +286,10 @@ func (g *Generator) transformValueNames(values []Value, transformMethod string)
|
||||||
r, _ := utf8.DecodeRuneInString(s)
|
r, _ := utf8.DecodeRuneInString(s)
|
||||||
return strings.ToLower(string(r))
|
return strings.ToLower(string(r))
|
||||||
}
|
}
|
||||||
|
case "whitespace":
|
||||||
|
fn = func(s string) string {
|
||||||
|
return strings.ToLower(name.Delimit(s, ' '))
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
type WhitespaceSeparatedValue int
|
||||||
|
|
||||||
|
const (
|
||||||
|
WhitespaceSeparatedValueOne WhitespaceSeparatedValue = iota
|
||||||
|
WhitespaceSeparatedValueTwo
|
||||||
|
WhitespaceSeparatedValueThree
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
ck(WhitespaceSeparatedValueOne, "whitespace separated value one")
|
||||||
|
ck(WhitespaceSeparatedValueTwo, "whitespace separated value two")
|
||||||
|
ck(WhitespaceSeparatedValueThree, "whitespace separated value three")
|
||||||
|
ck(-127, "WhitespaceSeparatedValue(-127)")
|
||||||
|
ck(127, "WhitespaceSeparatedValue(127)")
|
||||||
|
}
|
||||||
|
|
||||||
|
func ck(value WhitespaceSeparatedValue, str string) {
|
||||||
|
if fmt.Sprint(value) != str {
|
||||||
|
panic("transform_whitespace.go: " + str)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue