50 lines
1010 B
Go
50 lines
1010 B
Go
package miniredis
|
|
|
|
import (
|
|
"math"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/alicebob/miniredis/v2/server"
|
|
)
|
|
|
|
// optInt parses an int option in a command.
|
|
// Writes "invalid integer" error to c if it's not a valid integer. Returns
|
|
// whether or not things were okay.
|
|
func optInt(c *server.Peer, src string, dest *int) bool {
|
|
return optIntErr(c, src, dest, msgInvalidInt)
|
|
}
|
|
|
|
func optIntErr(c *server.Peer, src string, dest *int, errMsg string) bool {
|
|
n, err := strconv.Atoi(src)
|
|
if err != nil {
|
|
setDirty(c)
|
|
c.WriteError(errMsg)
|
|
return false
|
|
}
|
|
*dest = n
|
|
return true
|
|
}
|
|
|
|
func optDuration(c *server.Peer, src string, dest *time.Duration) bool {
|
|
n, err := strconv.ParseFloat(src, 64)
|
|
if err != nil {
|
|
setDirty(c)
|
|
c.WriteError(msgInvalidTimeout)
|
|
return false
|
|
}
|
|
if n < 0 {
|
|
setDirty(c)
|
|
c.WriteError(msgTimeoutNegative)
|
|
return false
|
|
}
|
|
if math.IsInf(n, 0) {
|
|
setDirty(c)
|
|
c.WriteError(msgTimeoutIsOutOfRange)
|
|
return false
|
|
}
|
|
|
|
*dest = time.Duration(n*1_000_000) * time.Microsecond
|
|
return true
|
|
}
|