clash/adapter/provider/subscription_info.go

40 lines
840 B
Go
Raw Normal View History

2022-11-04 18:24:08 +00:00
package provider
import (
"strconv"
"strings"
)
type SubscriptionInfo struct {
2022-11-08 14:30:50 +00:00
Upload int64
Download int64
Total int64
Expire int64
2022-11-04 18:24:08 +00:00
}
func NewSubscriptionInfo(userinfo string) (si *SubscriptionInfo, err error) {
userinfo = strings.ToLower(userinfo)
userinfo = strings.ReplaceAll(userinfo, " ", "")
si = new(SubscriptionInfo)
for _, field := range strings.Split(userinfo, ";") {
switch name, value, _ := strings.Cut(field, "="); name {
case "upload":
si.Upload, err = strconv.ParseInt(value, 10, 64)
case "download":
si.Download, err = strconv.ParseInt(value, 10, 64)
case "total":
si.Total, err = strconv.ParseInt(value, 10, 64)
case "expire":
2023-11-11 19:17:37 +00:00
if value == "" {
si.Expire = 0
} else {
si.Expire, err = strconv.ParseInt(value, 10, 64)
}
}
2022-11-04 18:24:08 +00:00
if err != nil {
return
2022-11-04 18:24:08 +00:00
}
}
return
}