Work on datbase controller

This commit is contained in:
Daniel 2018-09-07 19:15:40 +02:00
parent 818cb332b4
commit 3d60431376
6 changed files with 77 additions and 90 deletions

View file

@ -1,78 +0,0 @@
package query
import (
"github.com/tidwall/gjson"
)
const (
emptyString = ""
)
// Fetcher provides an interface to supply the query matcher a method to retrieve values from an object.
type Fetcher interface {
GetString(key string) (value string, ok bool)
GetInt(key string) (value int64, ok bool)
GetFloat(key string) (value float64, ok bool)
GetBool(key string) (value bool, ok bool)
Exists(key string) bool
}
// JSONFetcher is a json string with get functions.
type JSONFetcher struct {
json string
}
// NewJSONFetcher adds the Fetcher interface to a JSON string.
func NewJSONFetcher(json string) *JSONFetcher {
return &JSONFetcher{
json: json,
}
}
// GetString returns the string found by the given json key and whether it could be successfully extracted.
func (jf *JSONFetcher) GetString(key string) (value string, ok bool) {
result := gjson.Get(jf.json, key)
if !result.Exists() || result.Type != gjson.String {
return emptyString, false
}
return result.String(), true
}
// GetInt returns the int found by the given json key and whether it could be successfully extracted.
func (jf *JSONFetcher) GetInt(key string) (value int64, ok bool) {
result := gjson.Get(jf.json, key)
if !result.Exists() || result.Type != gjson.Number {
return 0, false
}
return result.Int(), true
}
// GetFloat returns the float found by the given json key and whether it could be successfully extracted.
func (jf *JSONFetcher) GetFloat(key string) (value float64, ok bool) {
result := gjson.Get(jf.json, key)
if !result.Exists() || result.Type != gjson.Number {
return 0, false
}
return result.Float(), true
}
// GetBool returns the bool found by the given json key and whether it could be successfully extracted.
func (jf *JSONFetcher) GetBool(key string) (value bool, ok bool) {
result := gjson.Get(jf.json, key)
switch {
case !result.Exists():
return false, false
case result.Type == gjson.True:
return true, true
case result.Type == gjson.False:
return false, true
default:
return false, false
}
}
// Exists returns the whether the given key exists.
func (jf *JSONFetcher) Exists(key string) bool {
result := gjson.Get(jf.json, key)
return result.Exists()
}