mirror of
https://github.com/safing/portbase
synced 2026-04-30 12:50:06 +00:00
Work on datbase controller
This commit is contained in:
parent
818cb332b4
commit
3d60431376
6 changed files with 77 additions and 90 deletions
|
|
@ -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()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue