Fix Range

This commit is contained in:
Sergei Maklagin
2025-06-15 22:21:58 +03:00
parent 52b71c6f00
commit ae9e7aa5f4

View File

@@ -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
}