Kepler core
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

50 lines
1.3 KiB

package cache
import (
"errors"
"net/url"
"strconv"
"strings"
)
// ds : dataSource: schema://username:password@host:port/db?options
func NewCache(ds string) (Cache, error) {
u,e := url.Parse(ds)
if nil != e {
return nil, e
}
switch u.Scheme {
case "redis":
var pass string
var db int64
var port uint = 6379
var enabled = true
if u.User != nil {
pass = u.User.Username()
if p, t := u.User.Password(); t {
pass = p
}
}
if u.Port() != "" {
if p, e := strconv.ParseUint(u.Port(), 10, 32); nil == e {
port = uint(p)
}
}
ps := strings.TrimLeft(u.Path, "/")
if ps != "" {
if d, e := strconv.ParseInt(ps, 10, 64); nil == e {
db = d
}
}
en := strings.ToLower(u.Query().Get("enabled"))
if en == "f" || en == "false" || en == "no" {
enabled = false
}
return new_redis_cache(u.Hostname(), port, db, pass, enabled)
default:
return nil, errors.New("Unsupported engine type: "+u.Scheme)
}
return nil, nil
}