From f4156429cbe2fd8984b7f30299202cd1bdeb704b Mon Sep 17 00:00:00 2001 From: utahta Date: Mon, 2 Sep 2024 14:45:53 +0900 Subject: [PATCH 1/2] fix warning --- resolver/resolver.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/resolver/resolver.go b/resolver/resolver.go index 4665c5be..519b6d49 100644 --- a/resolver/resolver.go +++ b/resolver/resolver.go @@ -541,6 +541,9 @@ func (r *Resolver) lookupPackageNameMapUsedInGRPCFederationDefinitionFromMessage } maps.Copy(pkgNameMap, r.lookupPackageNameMapFromMessageArguments(v.Expr.Call.Request.Args)) } + for _, err := range v.Expr.Call.Errors { + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromGRPCError(err)) + } case v.Expr.Message != nil: if v.Expr.Message.Message != nil { pkgNameMap[v.Expr.Message.Message.PackageName()] = struct{}{} @@ -556,6 +559,8 @@ func (r *Resolver) lookupPackageNameMapUsedInGRPCFederationDefinitionFromMessage maps.Copy(pkgNameMap, r.lookupPackageNameMapFromMessageArguments(v.Expr.Map.Expr.Message.Args)) } } + case v.Expr.Validation != nil: + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromGRPCError(v.Expr.Validation.Error)) } } } @@ -586,6 +591,23 @@ func (r *Resolver) lookupPackageNameMapUsedInGRPCFederationDefinitionFromMessage return pkgNameMap } +func (r *Resolver) lookupPackageNameMapFromGRPCError(err *GRPCError) map[string]struct{} { + if err == nil { + return nil + } + pkgNameMap := map[string]struct{}{} + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromCELValue(err.If)) + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromCELValue(err.Message)) + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromCELValue(err.IgnoreAndResponse)) + for _, detail := range err.Details { + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromCELValue(detail.If)) + for _, by := range detail.By { + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromCELValue(by)) + } + } + return pkgNameMap +} + func (r *Resolver) lookupPackageNameMapFromCELValue(val *CELValue) map[string]struct{} { if val == nil { return nil From ed85f102a7be1a5272e280cf7f51cb62ee7ba142 Mon Sep 17 00:00:00 2001 From: utahta Date: Mon, 2 Sep 2024 16:14:51 +0900 Subject: [PATCH 2/2] lookup DefSet, Messages, PreconditionFailures, BadRequests and LocalizedMessages fields --- resolver/resolver.go | 107 ++++++++++++++++++++++++++----------------- 1 file changed, 66 insertions(+), 41 deletions(-) diff --git a/resolver/resolver.go b/resolver/resolver.go index 519b6d49..ec8c7cd3 100644 --- a/resolver/resolver.go +++ b/resolver/resolver.go @@ -523,47 +523,7 @@ func (r *Resolver) lookupPackageNameMapUsedInGRPCFederationDefinitionFromMessage for _, a := range msg.Rule.Aliases { pkgNameMap[a.PackageName()] = struct{}{} } - if msg.Rule.DefSet != nil { - for _, v := range msg.Rule.DefSet.Defs { - if v.Expr == nil { - continue - } - switch { - case v.Expr.By != nil: - maps.Copy(pkgNameMap, r.lookupPackageNameMapFromCELValue(v.Expr.By)) - case v.Expr.Call != nil: - if v.Expr.Call.Method != nil && v.Expr.Call.Method.Service != nil { - pkgNameMap[v.Expr.Call.Method.Service.PackageName()] = struct{}{} - } - if v.Expr.Call.Request != nil { - if v.Expr.Call.Request.Type != nil { - pkgNameMap[v.Expr.Call.Request.Type.PackageName()] = struct{}{} - } - maps.Copy(pkgNameMap, r.lookupPackageNameMapFromMessageArguments(v.Expr.Call.Request.Args)) - } - for _, err := range v.Expr.Call.Errors { - maps.Copy(pkgNameMap, r.lookupPackageNameMapFromGRPCError(err)) - } - case v.Expr.Message != nil: - if v.Expr.Message.Message != nil { - pkgNameMap[v.Expr.Message.Message.PackageName()] = struct{}{} - } - maps.Copy(pkgNameMap, r.lookupPackageNameMapFromMessageArguments(v.Expr.Message.Args)) - case v.Expr.Map != nil: - if v.Expr.Map.Expr != nil { - if v.Expr.Map.Expr.By != nil { - maps.Copy(pkgNameMap, r.lookupPackageNameMapFromCELValue(v.Expr.Map.Expr.By)) - } - if v.Expr.Map.Expr.Message != nil { - pkgNameMap[v.Expr.Map.Expr.Message.Message.PackageName()] = struct{}{} - maps.Copy(pkgNameMap, r.lookupPackageNameMapFromMessageArguments(v.Expr.Map.Expr.Message.Args)) - } - } - case v.Expr.Validation != nil: - maps.Copy(pkgNameMap, r.lookupPackageNameMapFromGRPCError(v.Expr.Validation.Error)) - } - } - } + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromVariableDefinitionSet(msg.Rule.DefSet)) } for _, field := range msg.Fields { @@ -591,6 +551,53 @@ func (r *Resolver) lookupPackageNameMapUsedInGRPCFederationDefinitionFromMessage return pkgNameMap } +func (r *Resolver) lookupPackageNameMapFromVariableDefinitionSet(defSet *VariableDefinitionSet) map[string]struct{} { + if defSet == nil { + return nil + } + pkgNameMap := map[string]struct{}{} + for _, v := range defSet.Defs { + if v.Expr == nil { + continue + } + switch { + case v.Expr.By != nil: + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromCELValue(v.Expr.By)) + case v.Expr.Call != nil: + if v.Expr.Call.Method != nil && v.Expr.Call.Method.Service != nil { + pkgNameMap[v.Expr.Call.Method.Service.PackageName()] = struct{}{} + } + if v.Expr.Call.Request != nil { + if v.Expr.Call.Request.Type != nil { + pkgNameMap[v.Expr.Call.Request.Type.PackageName()] = struct{}{} + } + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromMessageArguments(v.Expr.Call.Request.Args)) + } + for _, err := range v.Expr.Call.Errors { + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromGRPCError(err)) + } + case v.Expr.Message != nil: + if v.Expr.Message.Message != nil { + pkgNameMap[v.Expr.Message.Message.PackageName()] = struct{}{} + } + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromMessageArguments(v.Expr.Message.Args)) + case v.Expr.Map != nil: + if v.Expr.Map.Expr != nil { + if v.Expr.Map.Expr.By != nil { + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromCELValue(v.Expr.Map.Expr.By)) + } + if v.Expr.Map.Expr.Message != nil { + pkgNameMap[v.Expr.Map.Expr.Message.Message.PackageName()] = struct{}{} + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromMessageArguments(v.Expr.Map.Expr.Message.Args)) + } + } + case v.Expr.Validation != nil: + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromGRPCError(v.Expr.Validation.Error)) + } + } + return pkgNameMap +} + func (r *Resolver) lookupPackageNameMapFromGRPCError(err *GRPCError) map[string]struct{} { if err == nil { return nil @@ -604,6 +611,24 @@ func (r *Resolver) lookupPackageNameMapFromGRPCError(err *GRPCError) map[string] for _, by := range detail.By { maps.Copy(pkgNameMap, r.lookupPackageNameMapFromCELValue(by)) } + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromVariableDefinitionSet(detail.Messages)) + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromVariableDefinitionSet(detail.DefSet)) + for _, preconditionFailure := range detail.PreconditionFailures { + for _, violation := range preconditionFailure.Violations { + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromCELValue(violation.Type)) + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromCELValue(violation.Subject)) + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromCELValue(violation.Description)) + } + } + for _, badRequest := range detail.BadRequests { + for _, fieldViolation := range badRequest.FieldViolations { + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromCELValue(fieldViolation.Field)) + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromCELValue(fieldViolation.Description)) + } + } + for _, localizedMessage := range detail.LocalizedMessages { + maps.Copy(pkgNameMap, r.lookupPackageNameMapFromCELValue(localizedMessage.Message)) + } } return pkgNameMap }