From 0ce3f3b5eb8c467189e5537bfff65814f91fbb0e Mon Sep 17 00:00:00 2001 From: George Suntres Date: Thu, 23 Apr 2026 13:17:48 -0400 Subject: [PATCH] Add MapOmit, Context Parse/Serialize --- context.go | 26 ++++++++++++++++++++++++++ go.mod | 7 ------- go.sum | 9 --------- struct.go | 17 +++++++++++++++++ 4 files changed, 43 insertions(+), 16 deletions(-) create mode 100644 context.go diff --git a/context.go b/context.go new file mode 100644 index 0000000..f2c52ac --- /dev/null +++ b/context.go @@ -0,0 +1,26 @@ +package commons + +import "context" + +func ContextSerialize(ctx context.Context, fields []string) map[string]any { + m := map[string]any{} + for _, name := range fields { + vAny := ctx.Value(name) + v, ok := vAny.(string) + if ok { + m[name] = v + } + } + + return m +} + +func ContextFromMap(m map[string]any) context.Context { + ctx := context.Background() + + for k, v := range m { + ctx = context.WithValue(ctx, k, v) + } + + return ctx +} \ No newline at end of file diff --git a/go.mod b/go.mod index 5b64255..e30f138 100644 --- a/go.mod +++ b/go.mod @@ -5,14 +5,7 @@ go 1.25.0 require ( github.com/go-viper/mapstructure/v2 v2.5.0 github.com/ianlancetaylor/jsonschema v0.0.0-20251021232724-46ecbf32a0a5 - github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 github.com/sergi/go-diff v1.4.0 - github.com/xeipuuv/gojsonschema v1.2.0 go.mongodb.org/mongo-driver/v2 v2.5.0 golang.org/x/text v0.30.0 ) - -require ( - github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect - github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect -) diff --git a/go.sum b/go.sum index 937cce9..83ce7e4 100644 --- a/go.sum +++ b/go.sum @@ -12,20 +12,11 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4= -github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY= github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw= github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= go.mongodb.org/mongo-driver/v2 v2.5.0 h1:yXUhImUjjAInNcpTcAlPHiT7bIXhshCTL3jVBkF3xaE= go.mongodb.org/mongo-driver/v2 v2.5.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= diff --git a/struct.go b/struct.go index 557cd26..5e1c148 100644 --- a/struct.go +++ b/struct.go @@ -43,6 +43,23 @@ func StructHasProperty(value interface{}, name string) bool { return has } +func MapOmit[K comparable, V any](m map[K]V, keys ...K) map[K]V { + out := make(map[K]V, len(m)) + + omit := make(map[K]struct{}, len(keys)) + for _, k := range keys { + omit[k] = struct{}{} + } + + for k, v := range m { + if _, ok := omit[k]; !ok { + out[k] = v + } + } + + return out +} + // MapMerge merges maps into one. func MapMerge[T ~map[string]any](maps...T) T { out := make(T)