7a04f298d2
- update to latest telegram layer - remove some references to fields in tg.Entities that don't exist in the schema - originally added here: https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e - referenced here - https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3 - https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
142 lines
3.1 KiB
Go
142 lines
3.1 KiB
Go
package gen
|
|
|
|
import (
|
|
"strings"
|
|
"unicode"
|
|
|
|
"github.com/go-openapi/inflect"
|
|
)
|
|
|
|
func pascalWords(words []string) string {
|
|
for i, w := range words {
|
|
upper := strings.ToUpper(w)
|
|
if alias, ok := aliases[upper]; ok {
|
|
words[i] = alias
|
|
continue
|
|
}
|
|
|
|
if _, ok := acronyms[upper]; ok {
|
|
words[i] = upper
|
|
continue
|
|
}
|
|
|
|
// check for acronym + any letter: IDs, IPs, UIDs
|
|
if _, ok := acronyms[upper[:len(upper)-1]]; ok {
|
|
words[i] = upper[:len(upper)-1] + strings.ToLower(upper[len(upper)-1:])
|
|
continue
|
|
}
|
|
|
|
words[i] = rules.Capitalize(w)
|
|
}
|
|
|
|
return strings.Join(words, "")
|
|
}
|
|
|
|
var (
|
|
rules = ruleset()
|
|
acronyms = make(map[string]struct{})
|
|
aliases = make(map[string]string)
|
|
)
|
|
|
|
// CodeMD5Test -> cODEmd5tEST
|
|
|
|
// splitByWords split name into words by separators and capital letters
|
|
func splitByWords(s string) []string {
|
|
if s == "" {
|
|
return []string{s}
|
|
}
|
|
|
|
if strings.ContainsAny(s, "_-") {
|
|
return strings.FieldsFunc(s, func(r rune) bool {
|
|
return r == '_' || r == '-'
|
|
})
|
|
}
|
|
|
|
words := make([]string, 0)
|
|
word := make([]rune, 0, len(s))
|
|
var prev rune
|
|
|
|
for i, current := range s {
|
|
if i == 0 {
|
|
prev = current
|
|
continue
|
|
}
|
|
|
|
switch {
|
|
case unicode.IsNumber(prev) || unicode.IsNumber(current):
|
|
word = append(word, prev)
|
|
case unicode.IsUpper(prev) && unicode.IsLower(current): // Ab
|
|
if len(word) != 0 {
|
|
words = append(words, string(word))
|
|
word = word[:0]
|
|
}
|
|
|
|
word = append(word, prev)
|
|
case unicode.IsLower(prev) && unicode.IsUpper(current): // aB
|
|
words = append(words, string(append(word, prev)))
|
|
word = word[:0]
|
|
default:
|
|
word = append(word, prev)
|
|
}
|
|
|
|
prev = current
|
|
}
|
|
|
|
words = append(words, string(append(word, prev)))
|
|
|
|
return words
|
|
}
|
|
|
|
// pascal converts the given name into a PascalCase.
|
|
//
|
|
// user_info => UserInfo
|
|
// full_name => FullName
|
|
// user_id => UserID
|
|
// full-admin => FullAdmin
|
|
// cdnConfig => CDNConfig
|
|
// cdn_1_config => CDN1Config
|
|
func pascal(s string) string {
|
|
words := splitByWords(s)
|
|
return pascalWords(words)
|
|
}
|
|
|
|
// camel converts the given name into a camelCase.
|
|
//
|
|
// user_info => userInfo
|
|
// full_name => fullName
|
|
// user_id => userID
|
|
// full-admin => fullAdmin
|
|
func camel(s string) string {
|
|
words := splitByWords(s)
|
|
if len(words) == 1 {
|
|
return strings.ToLower(words[0])
|
|
}
|
|
return strings.ToLower(words[0]) + pascalWords(words[1:])
|
|
}
|
|
|
|
func ruleset() *inflect.Ruleset {
|
|
r := inflect.NewDefaultRuleset()
|
|
// Add common initialisms from golint and more.
|
|
//
|
|
// You can commit this with following message:
|
|
// chore(gen): update acronym list
|
|
for _, w := range []string{
|
|
"ACL", "API", "ASCII", "AWS", "CPU", "CSS", "DNS", "EOF", "GB", "GUID",
|
|
"HTML", "HTTP", "HTTPS", "ID", "IP", "JSON", "KB", "LHS", "MAC", "MB",
|
|
"QPS", "RAM", "RHS", "RPC", "SLA", "SMTP", "SQL", "SSH", "SSO", "TCP",
|
|
"TLS", "TTL", "UDP", "UI", "UID", "URI", "URL", "UTF8", "UUID", "VM",
|
|
"XML", "XMPP", "XSRF", "XSS", "SMS", "CDN", "TCP", "UDP", "DC", "PFS",
|
|
"P2P", "SHA256", "SHA1", "MD5", "SRP", "2FA", "ISO",
|
|
} {
|
|
acronyms[w] = struct{}{}
|
|
r.AddAcronym(w)
|
|
}
|
|
|
|
aliases = map[string]string{
|
|
"TCPO": "TCPObfuscated",
|
|
"SMSJOBS": "SMSJobs",
|
|
}
|
|
|
|
return r
|
|
}
|