Files

37 lines
829 B
Go

// Package dclist parses comma-separated Telegram DC ids (int16).
package dclist
import (
"fmt"
"strconv"
"strings"
)
// ParseList parses "1,2,5" or "2". Empty string returns (nil, nil) — caller uses single-DC default.
func ParseList(s string) ([]int16, error) {
s = strings.TrimSpace(s)
if s == "" {
return nil, nil
}
parts := strings.Split(s, ",")
out := make([]int16, 0, len(parts))
for _, p := range parts {
p = strings.TrimSpace(p)
if p == "" {
continue
}
v, err := strconv.ParseInt(p, 10, 16)
if err != nil {
return nil, fmt.Errorf("dc id %q: %w", p, err)
}
if v < -32768 || v > 32767 {
return nil, fmt.Errorf("dc id %d out of int16 range", v)
}
out = append(out, int16(v))
}
if len(out) == 0 {
return nil, fmt.Errorf("empty dc list after parsing %q", s)
}
return out, nil
}