Files

97 lines
1.6 KiB
Go

package common
import (
"bytes"
"encoding/json"
"sync"
)
func NewBool(t bool) *bool {
return &t
}
func NewString(t string) *string {
if t == "" {
return nil
}
return &t
}
func NewInt(t int) *int {
return &t
}
func NewBoolFromInterface(val interface{}) bool {
switch val.(type) {
case bool: return val.(bool)
default: return false
}
}
func NewInt64pFromInterface(val interface{}) *int64 {
switch val.(type) {
case int64:
v := val.(int64)
return &v
case float64:
v := int64(val.(float64))
return &v
default: return nil
}
}
func NewStringpFromInterface(val interface{}) *string {
switch val.(type) {
case string:
v := val.(string)
return &v
default: return nil
}
}
func NewStringFromInterface(val interface{}) string {
switch val.(type) {
case string:
v := val.(string)
return v
default: return ""
}
}
func PrettyPrint(json_dirty []byte) []byte {
var json_pretty bytes.Buffer
error := json.Indent(&json_pretty, json_dirty, "", " ")
if error != nil {
return json_dirty
}
json_pretty.Write([]byte("\n"))
return json_pretty.Bytes()
}
type SafeMapStringString struct {
sync.RWMutex
internal map[string]string
}
func NewSafeMapStringString() SafeMapStringString {
return SafeMapStringString{
internal: make(map[string]string),
}
}
func(this SafeMapStringString) Set(key string, value string) {
this.Lock()
this.internal[key] = value
this.Unlock()
}
func(this SafeMapStringString) Gets(keys ...string) []string{
this.RLock()
defer this.RUnlock()
res := make([]string, len(keys))
for i, key := range keys {
res[i] = this.internal[key]
}
return res
}