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  }