Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
9264a2e99b
|
|||
2a0471fb3d
|
@@ -258,6 +258,18 @@ func (ee *ExErr) Depth() int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetMeta returns the meta value with the specified key
|
||||||
|
// this method recurses through all wrapped errors and returns the first matching meta value
|
||||||
|
func (ee *ExErr) GetMeta(key string) (any, bool) {
|
||||||
|
for curr := ee; curr != nil; curr = curr.OriginalError {
|
||||||
|
if v, ok := curr.Meta[key]; ok {
|
||||||
|
return v.Value, true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
|
||||||
// contains test if the supplied error is contained in this error (anywhere in the chain)
|
// contains test if the supplied error is contained in this error (anywhere in the chain)
|
||||||
func (ee *ExErr) contains(original *ExErr) (*ExErr, bool) {
|
func (ee *ExErr) contains(original *ExErr) (*ExErr, bool) {
|
||||||
if original == nil {
|
if original == nil {
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
package goext
|
package goext
|
||||||
|
|
||||||
const GoextVersion = "0.0.354"
|
const GoextVersion = "0.0.356"
|
||||||
|
|
||||||
const GoextVersionTimestamp = "2024-01-05T07:21:43+0100"
|
const GoextVersionTimestamp = "2024-01-05T10:43:39+0100"
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package sq
|
package sq
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||||
@@ -76,6 +77,34 @@ var ConverterRFC339NanoTimeToString = NewDBTypeConverter[rfctime.RFC3339NanoTime
|
|||||||
return rfctime.NewRFC3339Nano(t), nil
|
return rfctime.NewRFC3339Nano(t), nil
|
||||||
})
|
})
|
||||||
|
|
||||||
|
var ConverterJsonObjToString = NewDBTypeConverter[JsonObj, string](func(v JsonObj) (string, error) {
|
||||||
|
mrsh, err := json.Marshal(v)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return string(mrsh), nil
|
||||||
|
}, func(v string) (JsonObj, error) {
|
||||||
|
var mrsh JsonObj
|
||||||
|
if err := json.Unmarshal([]byte(v), &mrsh); err != nil {
|
||||||
|
return JsonObj{}, err
|
||||||
|
}
|
||||||
|
return mrsh, nil
|
||||||
|
})
|
||||||
|
|
||||||
|
var ConverterJsonArrToString = NewDBTypeConverter[JsonArr, string](func(v JsonArr) (string, error) {
|
||||||
|
mrsh, err := json.Marshal(v)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return string(mrsh), nil
|
||||||
|
}, func(v string) (JsonArr, error) {
|
||||||
|
var mrsh JsonArr
|
||||||
|
if err := json.Unmarshal([]byte(v), &mrsh); err != nil {
|
||||||
|
return JsonArr{}, err
|
||||||
|
}
|
||||||
|
return mrsh, nil
|
||||||
|
})
|
||||||
|
|
||||||
type dbTypeConverterImpl[TModelData any, TDBData any] struct {
|
type dbTypeConverterImpl[TModelData any, TDBData any] struct {
|
||||||
dbTypeString string
|
dbTypeString string
|
||||||
modelTypeString string
|
modelTypeString string
|
||||||
|
@@ -148,4 +148,6 @@ func (db *database) RegisterDefaultConverter() {
|
|||||||
db.RegisterConverter(ConverterRFCUnixTimeToUnixSeconds)
|
db.RegisterConverter(ConverterRFCUnixTimeToUnixSeconds)
|
||||||
db.RegisterConverter(ConverterRFC339TimeToString)
|
db.RegisterConverter(ConverterRFC339TimeToString)
|
||||||
db.RegisterConverter(ConverterRFC339NanoTimeToString)
|
db.RegisterConverter(ConverterRFC339NanoTimeToString)
|
||||||
|
db.RegisterConverter(ConverterJsonObjToString)
|
||||||
|
db.RegisterConverter(ConverterJsonArrToString)
|
||||||
}
|
}
|
||||||
|
5
sq/json.go
Normal file
5
sq/json.go
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package sq
|
||||||
|
|
||||||
|
type JsonObj map[string]any
|
||||||
|
|
||||||
|
type JsonArr []any
|
Reference in New Issue
Block a user