code: func ToSnakeCase(s string) string {
  	s = ToCamelCase(s)
  	runes := []rune(s)
  	length := len(runes)
  	var out []rune
  	for i := 0; i < length; i++ {
  		out = append(out, unicode.ToLower(runes[i]))
  		if i+1 < length && (unicode.IsUpper(runes[i+1]) && unicode.IsLower(runes[i])) {
  			out = append(out, '_')
  		}
  	}
  
  	return string(out)
  }
docs: // ToSnakeCase converts from camel case form to underscore separated form.