Compare commits

...

2 Commits

Author SHA1 Message Date
1f456c5134 v0.0.512
All checks were successful
Build Docker and Deploy / Run goext test-suite (push) Successful in 5m6s
2024-09-15 21:25:21 +02:00
d7fbef37db v0.0.511
All checks were successful
Build Docker and Deploy / Run goext test-suite (push) Successful in 3m10s
2024-09-15 18:22:07 +02:00
3 changed files with 22 additions and 10 deletions

View File

@@ -7,10 +7,11 @@ import (
)
type jsonHTTPResponse struct {
statusCode int
data any
headers []headerval
cookies []cookieval
statusCode int
data any
headers []headerval
cookies []cookieval
filterOverride *string
}
func (j jsonHTTPResponse) jsonRenderer(g *gin.Context) json.GoJsonRender {
@@ -18,6 +19,9 @@ func (j jsonHTTPResponse) jsonRenderer(g *gin.Context) json.GoJsonRender {
if jsonfilter := g.GetString(jsonFilterKey); jsonfilter != "" {
f = &jsonfilter
}
if j.filterOverride != nil {
f = j.filterOverride
}
return json.GoJsonRender{Data: j.data, NilSafeSlices: true, NilSafeMaps: true, Filter: f}
}
@@ -68,3 +72,7 @@ func (j jsonHTTPResponse) Headers() []string {
func JSON(sc int, data any) HTTPResponse {
return &jsonHTTPResponse{statusCode: sc, data: data}
}
func JSONWithFilter(sc int, data any, f string) HTTPResponse {
return &jsonHTTPResponse{statusCode: sc, data: data, filterOverride: &f}
}

View File

@@ -1,5 +1,5 @@
package goext
const GoextVersion = "0.0.510"
const GoextVersion = "0.0.512"
const GoextVersionTimestamp = "2024-09-13T18:06:49+0200"
const GoextVersionTimestamp = "2024-09-15T21:25:21+0200"

View File

@@ -788,7 +788,7 @@ FieldLoop:
if f.omitEmpty && isEmptyValue(fv) {
continue
} else if opts.filter != nil && !matchesJSONFilter(f.jsonfilter, *opts.filter) {
} else if !matchesJSONFilter(f.jsonfilter, opts.filter) {
continue
}
e.WriteByte(next)
@@ -808,16 +808,20 @@ FieldLoop:
}
}
func matchesJSONFilter(filter jsonfilter, value string) bool {
func matchesJSONFilter(filter jsonfilter, value *string) bool {
if len(filter) == 0 {
return true
return true // no filter in struct
}
if value == nil || *value == "" {
return false // no filter set, but struct has filter, return false
}
if len(filter) == 1 && filter[0] == "-" {
return false
}
if filter.Contains(value) {
if filter.Contains(*value) {
return true
}