xworkmate-bridge/internal/shared/helpers.go
2026-04-09 09:49:48 +08:00

82 lines
1.5 KiB
Go

package shared
import (
"fmt"
"os"
"strings"
)
func NormalizeBaseURL(raw string) string {
trimmed := strings.TrimSpace(raw)
if trimmed == "" {
return "https://api.openai.com/v1"
}
if strings.HasSuffix(trimmed, "/v1") {
return trimmed
}
return strings.TrimRight(trimmed, "/") + "/v1"
}
func EnvOrDefault(key, fallback string) string {
value := strings.TrimSpace(os.Getenv(key))
if value == "" {
return fallback
}
return value
}
func StringArg(arguments map[string]any, key, fallback string) string {
if arguments == nil {
return fallback
}
value, ok := arguments[key]
if !ok {
return fallback
}
text := strings.TrimSpace(fmt.Sprint(value))
if text == "" || text == "<nil>" {
return fallback
}
return text
}
func ListArg(arguments map[string]any, key string) []any {
if arguments == nil {
return nil
}
raw, ok := arguments[key]
if !ok || raw == nil {
return nil
}
if values, ok := raw.([]any); ok {
return values
}
if values, ok := raw.([]interface{}); ok {
return values
}
return nil
}
func IntArg(raw string, fallback int) int {
var parsed int
if _, err := fmt.Sscanf(raw, "%d", &parsed); err != nil || parsed <= 0 {
return fallback
}
return parsed
}
func BoolArg(raw string, fallback bool) bool {
trimmed := strings.TrimSpace(strings.ToLower(raw))
if trimmed == "" {
return fallback
}
switch trimmed {
case "1", "true", "yes", "on":
return true
case "0", "false", "no", "off":
return false
default:
return fallback
}
}