github.com/alimy/mir/v4@v4.1.0/internal/naming/simple_ns.go (about) 1 // Copyright 2020 Michael Li <alimy@gility.net>. All rights reserved. 2 // Use of this source code is governed by Apache License 2.0 that 3 // can be found in the LICENSE file. 4 5 package naming 6 7 import ( 8 "strings" 9 "unicode" 10 ) 11 12 type simpleNamingStrategy struct { 13 // just empty 14 } 15 16 func (s *simpleNamingStrategy) Naming(name string) string { 17 b := &strings.Builder{} 18 notFirst := false 19 b.Grow(len(name) + 3) 20 for _, r := range name { 21 if unicode.IsUpper(r) { 22 if notFirst { 23 b.WriteRune('_') 24 } 25 b.WriteRune(unicode.ToLower(r)) 26 } else { 27 b.WriteRune(r) 28 } 29 notFirst = true 30 } 31 return b.String() 32 } 33 34 // NewSimpleNamingStrategy return simple naming strategy instance 35 func NewSimpleNamingStrategy() NamingStrategy { 36 return &simpleNamingStrategy{} 37 }