mukan-ignite/ignite/pkg/xstrings/xstrings.go
Mukan Erkin Törük 26b204bd04
Some checks are pending
Docs Deploy / build_and_deploy (push) Waiting to run
Generate Docs / cli (push) Waiting to run
Generate Config Doc / cli (push) Waiting to run
Go formatting / go-formatting (push) Waiting to run
Check links / markdown-link-check (push) Waiting to run
Integration / pre-test (push) Waiting to run
Integration / test on (push) Blocked by required conditions
Integration / status (push) Blocked by required conditions
Lint / Lint Go code (push) Waiting to run
Test / test (ubuntu-latest) (push) Waiting to run
feat: fork Ignite CLI v29 as Mukan Ignite — remove cosmos-sdk restrictions
2026-05-11 03:31:37 +03:00

94 lines
2.2 KiB
Go

package xstrings
import (
"slices"
"strings"
"unicode"
"golang.org/x/text/cases"
"golang.org/x/text/language"
)
// AllOrSomeFilter filters elems out from the list as they present in filterList and
// returns the remaining ones.
// if filterList is empty, all elems from list returned.
func AllOrSomeFilter(list, filterList []string) []string {
if len(filterList) == 0 {
return list
}
var elems []string
for _, elem := range list {
if !slices.Contains(filterList, elem) {
elems = append(elems, elem)
}
}
return elems
}
// List returns a slice of strings captured after the value returned by do which is
// called n times.
func List(n int, do func(i int) string) []string {
var list []string
for i := 0; i < n; i++ {
list = append(list, do(i))
}
return list
}
// FormatUsername formats a username to make it usable as a variable.
func FormatUsername(s string) string {
return NoDash(NoNumberPrefix(s))
}
// NoDash removes dash from the string.
func NoDash(s string) string {
return strings.ReplaceAll(s, "-", "")
}
// NoNumberPrefix adds an underscore at the beginning of the string if it stars with a number
// this is used for package of proto files template because the package name can't start with a number.
func NoNumberPrefix(s string) string {
// Check if it starts with a digit
if unicode.IsDigit(rune(s[0])) {
return "_" + s
}
return s
}
// Title returns a copy of the string s with all Unicode letters that begin words
// mapped to their Unicode title case.
func Title(s string) string {
return cases.Title(language.English).String(s)
}
// ToUpperFirst returns a copy of the string with the first unicode letter in upper case.
func ToUpperFirst(s string) string {
return strings.ToUpper(s[:1]) + s[1:]
}
// StringBetween returns the string between two other strings.
// The comparison is not greedy so the between result includes the
// string between the start value and the first match of the end value.
func StringBetween(s, start, end string) string {
if s == "" || start == "" || end == "" {
return ""
}
i := strings.Index(s, start)
if i == -1 {
return ""
}
s = s[i+len(start):]
i = strings.Index(s, end)
if i == -1 {
return ""
}
return s[:i]
}