Skip to content

Commit

Permalink
Fix issue with parents not reset during payload visiting (#175)
Browse files Browse the repository at this point in the history
  • Loading branch information
cretz authored Sep 4, 2024
1 parent 9d01b39 commit 9b25afc
Show file tree
Hide file tree
Showing 5 changed files with 219 additions and 164 deletions.
2 changes: 1 addition & 1 deletion cmd/proxygenerator/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ require (
golang.org/x/text v0.17.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed // indirect
google.golang.org/grpc v1.65.0 // indirect
google.golang.org/grpc v1.66.0 // indirect
google.golang.org/protobuf v1.34.2 // indirect
)
4 changes: 2 additions & 2 deletions cmd/proxygenerator/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed h1:
google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:OCdP9MfskevB/rbYvHTsXTtKC+3bHWajPdoKgjcYkfo=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed h1:J6izYgfBXAI3xTKLgxzTmUltdYaLsuBxFCgDHWJ/eXg=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc=
google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ=
google.golang.org/grpc v1.66.0 h1:DibZuoBznOxbDQxRINckZcUvnCEvrW9pcWIE2yF9r1c=
google.golang.org/grpc v1.66.0/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y=
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
Expand Down
34 changes: 23 additions & 11 deletions cmd/proxygenerator/interceptor.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ type VisitPayloadsOptions struct {
func VisitPayloads(ctx context.Context, msg proto.Message, options VisitPayloadsOptions) error {
visitCtx := VisitPayloadsContext{Context: ctx, Parent: msg}
return visitPayloads(&visitCtx, &options, msg)
return visitPayloads(&visitCtx, &options, nil, msg)
}
// PayloadVisitorInterceptorOptions configures outbound/inbound interception of Payloads within msgs.
Expand Down Expand Up @@ -159,10 +159,15 @@ func NewFailureVisitorInterceptor(options FailureVisitorInterceptorOptions) (grp
}, nil
}
func visitPayload(ctx *VisitPayloadsContext, options *VisitPayloadsOptions, msg *common.Payload) (*common.Payload, error) {
ctx.SinglePayloadRequired = true
func visitPayload(
ctx *VisitPayloadsContext,
options *VisitPayloadsOptions,
parent proto.Message,
msg *common.Payload,
) (*common.Payload, error) {
ctx.SinglePayloadRequired, ctx.Parent = true, parent
newPayloads, err := options.Visitor(ctx, []*common.Payload{msg})
ctx.SinglePayloadRequired, ctx.Parent = false, nil
if err != nil {
return nil, err
}
Expand All @@ -174,48 +179,55 @@ func visitPayload(ctx *VisitPayloadsContext, options *VisitPayloadsOptions, msg
return newPayloads[0], nil
}
func visitPayloads(ctx *VisitPayloadsContext, options *VisitPayloadsOptions, objs ...interface{}) error {
func visitPayloads(
ctx *VisitPayloadsContext,
options *VisitPayloadsOptions,
parent proto.Message,
objs ...interface{},
) error {
for i, obj := range objs {
ctx.SinglePayloadRequired = false
switch o := obj.(type) {
case *common.Payload:
if o == nil { continue }
no, err := visitPayload(ctx, options, o)
no, err := visitPayload(ctx, options, parent, o)
if err != nil { return err }
objs[i] = no
case map[string]*common.Payload:
for ix, x := range o {
if nx, err := visitPayload(ctx, options, x); err != nil {
if nx, err := visitPayload(ctx, options, parent, x); err != nil {
return err
} else {
o[ix] = nx
}
}
case *common.Payloads:
if o == nil { continue }
ctx.Parent = parent
newPayloads, err := options.Visitor(ctx, o.Payloads)
ctx.Parent = nil
if err != nil { return err }
o.Payloads = newPayloads
case map[string]*common.Payloads:
for _, x := range o {
if err := visitPayloads(ctx, options, x); err != nil {
if err := visitPayloads(ctx, options, parent, x); err != nil {
return err
}
}
{{range $type, $record := .PayloadTypes}}
{{if $record.Slice}}
case []{{$type}}:
for _, x := range o {
if err := visitPayloads(ctx, options, x); err != nil {
if err := visitPayloads(ctx, options, parent, x); err != nil {
return err
}
}
{{end}}
{{if $record.Map}}
case map[string]{{$type}}:
for _, x := range o {
if err := visitPayloads(ctx, options, x); err != nil {
if err := visitPayloads(ctx, options, parent, x); err != nil {
return err
}
}
Expand All @@ -225,10 +237,10 @@ func visitPayloads(ctx *VisitPayloadsContext, options *VisitPayloadsOptions, obj
if options.SkipSearchAttributes { continue }
{{end}}
if o == nil { continue }
ctx.Parent = o
if err := visitPayloads(
ctx,
options,
o,
{{range $record.Methods -}}
o.{{.}}(),
{{end}}
Expand Down
Loading

0 comments on commit 9b25afc

Please sign in to comment.