37 lines
829 B
Go
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
|
|
}
|