github.com/nathanstitt/genqlient@v0.3.1-0.20211028004951-a2bda3c41ab8/generate/util.go (about)

     1  package generate
     2  
     3  import (
     4  	"strings"
     5  	"unicode"
     6  	"unicode/utf8"
     7  )
     8  
     9  func reverse(slice []string) {
    10  	for left, right := 0, len(slice)-1; left < right; left, right = left+1, right-1 {
    11  		slice[left], slice[right] = slice[right], slice[left]
    12  	}
    13  }
    14  
    15  func changeFirst(s string, f func(rune) rune) string {
    16  	c, n := utf8.DecodeRuneInString(s)
    17  	if c == utf8.RuneError { // empty or invalid
    18  		return s
    19  	}
    20  	return string(f(c)) + s[n:]
    21  }
    22  
    23  func lowerFirst(s string) string {
    24  	return changeFirst(strings.TrimLeft(s, "_"), unicode.ToLower)
    25  }
    26  
    27  func upperFirst(s string) string {
    28  	return changeFirst(strings.TrimLeft(s, "_"), unicode.ToUpper)
    29  }
    30  
    31  func goConstName(s string) string {
    32  	if strings.TrimLeft(s, "_") == "" {
    33  		return s
    34  	}
    35  	var prev rune
    36  	return strings.Map(func(r rune) rune {
    37  		var ret rune
    38  		if r == '_' {
    39  			ret = -1
    40  		} else if prev == '_' || prev == 0 {
    41  			ret = unicode.ToUpper(r)
    42  		} else {
    43  			ret = unicode.ToLower(r)
    44  		}
    45  		prev = r
    46  		return ret
    47  	}, s)
    48  }