reactor sql generation

This commit is contained in:
anqiansong
2020-08-12 09:19:37 +08:00
parent 40895ba8d9
commit f226ffb57c
45 changed files with 892 additions and 1045 deletions

View File

@@ -0,0 +1,145 @@
package stringx
import (
"bytes"
"strings"
"unicode"
)
const (
emptyString = ""
)
type (
String struct {
source string
}
)
func From(data string) String {
return String{source: data}
}
func (s String) IsEmptyOrSpace() bool {
if len(s.source) == 0 {
return true
}
if strings.TrimSpace(s.source) == "" {
return true
}
return false
}
func (s String) Lower() string {
if s.IsEmptyOrSpace() {
return s.source
}
return strings.ToLower(s.source)
}
func (s String) Upper() string {
if s.IsEmptyOrSpace() {
return s.source
}
return strings.ToUpper(s.source)
}
func (s String) Title() string {
if s.IsEmptyOrSpace() {
return s.source
}
return strings.Title(s.source)
}
// snake->camel(upper start)
func (s String) Snake2Camel() string {
if s.IsEmptyOrSpace() {
return s.source
}
list := s.splitBy(func(r rune) bool {
return r == '_'
}, true)
var target []string
for _, item := range list {
target = append(target, From(item).Title())
}
return strings.Join(target, "")
}
// camel->snake
func (s String) Camel2Snake() string {
if s.IsEmptyOrSpace() {
return s.source
}
list := s.splitBy(func(r rune) bool {
return unicode.IsUpper(r)
}, false)
var target []string
for _, item := range list {
target = append(target, From(item).Lower())
}
return strings.Join(target, "_")
}
// return original string if rune is not letter at index 0
func (s String) LowerStart() string {
if s.IsEmptyOrSpace() {
return s.source
}
r := rune(s.source[0])
if !unicode.IsUpper(r) && !unicode.IsLower(r) {
return s.source
}
return string(r) + s.source[1:]
}
// it will not ignore spaces
func (s String) splitBy(fn func(r rune) bool, remove bool) []string {
if s.IsEmptyOrSpace() {
return nil
}
var list []string
buffer := new(bytes.Buffer)
for _, r := range s.source {
if fn(r) {
if buffer.Len() != 0 {
list = append(list, buffer.String())
buffer.Reset()
}
if !remove {
buffer.WriteRune(r)
}
continue
}
buffer.WriteRune(r)
}
if buffer.Len() != 0 {
list = append(list, buffer.String())
}
return list
}
func (s String) Replace(old, new string) string {
return strings.ReplaceAll(s.source, old, new)
}
func (s String) ReplaceAll(old, new string) string {
return strings.ReplaceAll(s.source, old, new)
}
func (s String) Source() string {
return s.source
}
func Title(s string) string {
if len(s) == 0 {
return s
}
return strings.ToUpper(s[:1]) + s[1:]
}
func Untitle(s string) string {
if len(s) == 0 {
return s
}
return strings.ToLower(s[:1]) + s[1:]
}