diff --git a/goextVersion.go b/goextVersion.go index c9573cd..2d1eaec 100644 --- a/goextVersion.go +++ b/goextVersion.go @@ -1,5 +1,5 @@ package goext -const GoextVersion = "0.0.354" +const GoextVersion = "0.0.355" -const GoextVersionTimestamp = "2024-01-05T07:21:43+0100" +const GoextVersionTimestamp = "2024-01-05T10:25:05+0100" diff --git a/sq/converter.go b/sq/converter.go index 779046e..9583327 100644 --- a/sq/converter.go +++ b/sq/converter.go @@ -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 diff --git a/sq/database.go b/sq/database.go index 529c8cf..12f4b0f 100644 --- a/sq/database.go +++ b/sq/database.go @@ -148,4 +148,6 @@ func (db *database) RegisterDefaultConverter() { db.RegisterConverter(ConverterRFCUnixTimeToUnixSeconds) db.RegisterConverter(ConverterRFC339TimeToString) db.RegisterConverter(ConverterRFC339NanoTimeToString) + db.RegisterConverter(ConverterJsonObjToString) + db.RegisterConverter(ConverterJsonArrToString) } diff --git a/sq/json.go b/sq/json.go new file mode 100644 index 0000000..4b66c36 --- /dev/null +++ b/sq/json.go @@ -0,0 +1,5 @@ +package sq + +type JsonObj map[string]any + +type JsonArr []any