subscription_info.go 840 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package provider
  2. import (
  3. "strconv"
  4. "strings"
  5. )
  6. type SubscriptionInfo struct {
  7. Upload int64
  8. Download int64
  9. Total int64
  10. Expire int64
  11. }
  12. func NewSubscriptionInfo(userinfo string) (si *SubscriptionInfo, err error) {
  13. userinfo = strings.ToLower(userinfo)
  14. userinfo = strings.ReplaceAll(userinfo, " ", "")
  15. si = new(SubscriptionInfo)
  16. for _, field := range strings.Split(userinfo, ";") {
  17. switch name, value, _ := strings.Cut(field, "="); name {
  18. case "upload":
  19. si.Upload, err = strconv.ParseInt(value, 10, 64)
  20. case "download":
  21. si.Download, err = strconv.ParseInt(value, 10, 64)
  22. case "total":
  23. si.Total, err = strconv.ParseInt(value, 10, 64)
  24. case "expire":
  25. if value == "" {
  26. si.Expire = 0
  27. } else {
  28. si.Expire, err = strconv.ParseInt(value, 10, 64)
  29. }
  30. }
  31. if err != nil {
  32. return
  33. }
  34. }
  35. return
  36. }