diff --git a/common/xray/json/badoption/range.go b/common/xray/json/badoption/range.go index 6390a158..645fda82 100644 --- a/common/xray/json/badoption/range.go +++ b/common/xray/json/badoption/range.go @@ -24,27 +24,36 @@ func (c *Range) MarshalJSON() ([]byte, error) { } func (c *Range) UnmarshalJSON(content []byte) error { + var rangeValue struct { + From int32 `json:"from"` + To int32 `json:"to"` + } var stringValue string err := json.Unmarshal(content, &stringValue) - if err != nil { - return err + if err == nil { + parts := strings.Split(stringValue, "-") + if len(parts) != 2 { + return E.New("invalid length of range parts") + } + from, err := strconv.ParseInt(parts[0], 10, 32) + if err != nil { + return err + } + to, err := strconv.ParseInt(parts[1], 10, 32) + if err != nil { + return err + } + rangeValue.From, rangeValue.To = int32(from), int32(to) + } else { + err := json.Unmarshal(content, &rangeValue) + if err != nil { + return err + } } - parts := strings.Split(stringValue, "-") - if len(parts) != 2 { - return E.New("invalid length of range parts") - } - from, err := strconv.ParseInt(parts[0], 10, 32) - if err != nil { - return err - } - to, err := strconv.ParseInt(parts[1], 10, 32) - if err != nil { - return err - } - if from > to { + if rangeValue.From > rangeValue.To { return E.New("invalid range") } - *c = Range{int32(from), int32(to)} + *c = Range{rangeValue.From, rangeValue.To} return nil }