Compare commits

..

2 Commits

Author SHA1 Message Date
9264a2e99b v0.0.356 exerr.GetMeta
All checks were successful
Build Docker and Deploy / Run goext test-suite (push) Successful in 1m9s
2024-01-05 10:43:39 +01:00
2a0471fb3d v0.0.355 sq.Json
All checks were successful
Build Docker and Deploy / Run goext test-suite (push) Successful in 2m27s
2024-01-05 10:25:05 +01:00
5 changed files with 50 additions and 2 deletions

View File

@@ -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)
func (ee *ExErr) contains(original *ExErr) (*ExErr, bool) {
if original == nil {

View File

@@ -1,5 +1,5 @@
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"

View File

@@ -1,6 +1,7 @@
package sq
import (
"encoding/json"
"errors"
"fmt"
"gogs.mikescher.com/BlackForestBytes/goext/langext"
@@ -76,6 +77,34 @@ var ConverterRFC339NanoTimeToString = NewDBTypeConverter[rfctime.RFC3339NanoTime
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 {
dbTypeString string
modelTypeString string

View File

@@ -148,4 +148,6 @@ func (db *database) RegisterDefaultConverter() {
db.RegisterConverter(ConverterRFCUnixTimeToUnixSeconds)
db.RegisterConverter(ConverterRFC339TimeToString)
db.RegisterConverter(ConverterRFC339NanoTimeToString)
db.RegisterConverter(ConverterJsonObjToString)
db.RegisterConverter(ConverterJsonArrToString)
}

5
sq/json.go Normal file
View File

@@ -0,0 +1,5 @@
package sq
type JsonObj map[string]any
type JsonArr []any