mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 05:21:57 +00:00
102 lines
2.2 KiB
Go
102 lines
2.2 KiB
Go
package utils
|
|
|
|
import (
|
|
"sort"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// NormalizeTrim returns the input string without leading/trailing whitespace.
|
|
func NormalizeTrim(value string) string {
|
|
return strings.TrimSpace(value)
|
|
}
|
|
|
|
// NormalizeUpper returns the trimmed, upper-case version of value.
|
|
func NormalizeUpper(value string) string {
|
|
return strings.ToUpper(NormalizeTrim(value))
|
|
}
|
|
|
|
// NormalizeFlag trims whitespace, removes surrounding brackets/quotes and returns upper-case flag
|
|
func NormalizeFlag(value string) string {
|
|
v := NormalizeTrim(value)
|
|
v = strings.Trim(v, "[]\"'")
|
|
return strings.ToUpper(v)
|
|
}
|
|
|
|
// ParseFlags parses a raw flags string like "[DOC, PAKAN]" or "DOC,PAKAN"
|
|
// and returns a deduplicated, sorted slice of normalized flags (upper-case, trimmed).
|
|
func ParseFlags(raw string) []string {
|
|
if raw == "" {
|
|
return nil
|
|
}
|
|
parts := strings.Split(raw, ",")
|
|
set := make(map[string]struct{}, len(parts))
|
|
for _, p := range parts {
|
|
f := NormalizeFlag(p)
|
|
if f == "" {
|
|
continue
|
|
}
|
|
set[f] = struct{}{}
|
|
}
|
|
if len(set) == 0 {
|
|
return nil
|
|
}
|
|
res := make([]string, 0, len(set))
|
|
for k := range set {
|
|
res = append(res, k)
|
|
}
|
|
sort.Strings(res)
|
|
return res
|
|
}
|
|
|
|
// ParseQueryArray parses comma-separated string values and returns a slice of trimmed strings
|
|
// Example: "a, b, c" → ["a", "b", "c"]
|
|
func ParseQueryArray(raw string) []string {
|
|
if raw == "" {
|
|
return nil
|
|
}
|
|
|
|
parts := strings.Split(raw, ",")
|
|
result := make([]string, 0, len(parts))
|
|
|
|
for _, p := range parts {
|
|
trimmed := strings.TrimSpace(p)
|
|
if trimmed != "" {
|
|
result = append(result, trimmed)
|
|
}
|
|
}
|
|
|
|
if len(result) == 0 {
|
|
return nil
|
|
}
|
|
return result
|
|
}
|
|
|
|
// ParseQueryUintArray parses comma-separated string values and returns a slice of uint
|
|
// Invalid values are skipped
|
|
// Example: "1, 2, 3" → [1, 2, 3]
|
|
func ParseQueryUintArray(raw string) []uint {
|
|
if raw == "" {
|
|
return nil
|
|
}
|
|
|
|
parts := strings.Split(raw, ",")
|
|
result := make([]uint, 0, len(parts))
|
|
|
|
for _, p := range parts {
|
|
trimmed := strings.TrimSpace(p)
|
|
if trimmed == "" {
|
|
continue
|
|
}
|
|
|
|
if num, err := strconv.ParseUint(trimmed, 10, 32); err == nil {
|
|
result = append(result, uint(num))
|
|
}
|
|
}
|
|
|
|
if len(result) == 0 {
|
|
return nil
|
|
}
|
|
return result
|
|
}
|