diff --git a/_examples/02_simple/federation/federation_grpc_federation.pb.go b/_examples/02_simple/federation/federation_grpc_federation.pb.go index 3c806d51..cbc972c3 100644 --- a/_examples/02_simple/federation/federation_grpc_federation.pb.go +++ b/_examples/02_simple/federation/federation_grpc_federation.pb.go @@ -270,7 +270,11 @@ func (s *FederationService) resolve_Federation_A(ctx context.Context, req *Feder }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Federation_A_BArgument{} - return s.resolve_Federation_A_B(ctx, args) + ret, err := s.resolve_Federation_A_B(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -365,7 +369,11 @@ func (s *FederationService) resolve_Federation_A_B(ctx context.Context, req *Fed }); err != nil { return nil, err } - return s.resolve_Federation_A_B_C(ctx, args) + ret, err := s.resolve_Federation_A_B_C(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx2, err) @@ -406,7 +414,11 @@ func (s *FederationService) resolve_Federation_A_B(ctx context.Context, req *Fed }); err != nil { return nil, err } - return s.resolve_Federation_A_B_C(ctx, args) + ret, err := s.resolve_Federation_A_B_C(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx2, err) @@ -479,7 +491,11 @@ func (s *FederationService) resolve_Federation_A_B(ctx context.Context, req *Fed }); err != nil { return nil, err } - return s.resolve_Federation_A_B_C(ctx, args) + ret, err := s.resolve_Federation_A_B_C(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx2, err) @@ -520,7 +536,11 @@ func (s *FederationService) resolve_Federation_A_B(ctx context.Context, req *Fed }); err != nil { return nil, err } - return s.resolve_Federation_A_B_C(ctx, args) + ret, err := s.resolve_Federation_A_B_C(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx2, err) @@ -711,7 +731,11 @@ func (s *FederationService) resolve_Federation_GetPostResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Federation_Post(ctx, args) + ret, err := s.resolve_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -761,7 +785,11 @@ func (s *FederationService) resolve_Federation_GetPostResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Federation_AArgument{} - return s.resolve_Federation_A(ctx, args) + ret, err := s.resolve_Federation_A(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -1534,7 +1562,7 @@ func (s *FederationService) resolve_Federation_Post(ctx context.Context, req *Fe return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call post.PostService/GetPost", slog.Any("post.GetPostRequest", s.logvalue_Post_GetPostRequest(args))) - return grpcfed.WithTimeout[post.GetPostResponse](ctx, "post.PostService/GetPost", 10000000000 /* 10s */, func(ctx context.Context) (*post.GetPostResponse, error) { + ret, err := grpcfed.WithTimeout[post.GetPostResponse](ctx, "post.PostService/GetPost", 10000000000 /* 10s */, func(ctx context.Context) (*post.GetPostResponse, error) { b := grpcfed.NewConstantBackOff(2000000000) /* 2s */ b = grpcfed.BackOffWithMaxRetries(b, 3) b = grpcfed.BackOffWithContext(b, ctx) @@ -1548,12 +1576,17 @@ func (s *FederationService) resolve_Federation_Post(ctx context.Context, req *Fe }, }) }) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -1612,7 +1645,11 @@ func (s *FederationService) resolve_Federation_Post(ctx context.Context, req *Fe }); err != nil { return nil, err } - return s.resolve_Federation_User(ctx, args) + ret, err := s.resolve_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -1716,7 +1753,7 @@ func (s *FederationService) resolve_Federation_User(ctx context.Context, req *Fe return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call user.UserService/GetUser", slog.Any("user.GetUserRequest", s.logvalue_User_GetUserRequest(args))) - return grpcfed.WithTimeout[user.GetUserResponse](ctx, "user.UserService/GetUser", 20000000000 /* 20s */, func(ctx context.Context) (*user.GetUserResponse, error) { + ret, err := grpcfed.WithTimeout[user.GetUserResponse](ctx, "user.UserService/GetUser", 20000000000 /* 20s */, func(ctx context.Context) (*user.GetUserResponse, error) { b := grpcfed.NewExponentialBackOff(&grpcfed.ExponentialBackOffConfig{ InitialInterval: 1000000000, /* 1s */ RandomizationFactor: 0.7, @@ -1736,12 +1773,17 @@ func (s *FederationService) resolve_Federation_User(ctx context.Context, req *Fe }, }) }) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_User_UserService_GetUser, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx, FederationService_DependentMethod_User_UserService_GetUser, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // This section's codes are generated by the following proto definition. diff --git a/_examples/03_custom_resolver/federation/federation_grpc_federation.pb.go b/_examples/03_custom_resolver/federation/federation_grpc_federation.pb.go index ebd2d258..0c2a3512 100644 --- a/_examples/03_custom_resolver/federation/federation_grpc_federation.pb.go +++ b/_examples/03_custom_resolver/federation/federation_grpc_federation.pb.go @@ -403,7 +403,11 @@ func (s *FederationV2DevService) resolve_Federation_V2Dev_GetPostV2DevResponse(c }); err != nil { return nil, err } - return s.resolve_Federation_V2Dev_PostV2Dev(ctx, args) + ret, err := s.resolve_Federation_V2Dev_PostV2Dev(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -432,7 +436,11 @@ func (s *FederationV2DevService) resolve_Federation_V2Dev_GetPostV2DevResponse(c }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationV2DevService_Federation_V2Dev_RefArgument{} - return s.resolve_Federation_V2Dev_Ref(ctx, args) + ret, err := s.resolve_Federation_V2Dev_Ref(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -602,7 +610,11 @@ func (s *FederationV2DevService) resolve_Federation_V2Dev_PostV2Dev(ctx context. }); err != nil { return nil, err } - return s.resolve_Federation_V2Dev_ForNameless(ctx, args) + ret, err := s.resolve_Federation_V2Dev_ForNameless(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -644,7 +656,11 @@ func (s *FederationV2DevService) resolve_Federation_V2Dev_PostV2Dev(ctx context. }); err != nil { return nil, err } - return s.resolve_Federation_V2Dev_Unused(ctx, args) + ret, err := s.resolve_Federation_V2Dev_Unused(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -687,13 +703,18 @@ func (s *FederationV2DevService) resolve_Federation_V2Dev_PostV2Dev(ctx context. return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call post.PostService/GetPost", slog.Any("post.GetPostRequest", s.logvalue_Post_GetPostRequest(args))) - return s.client.Post_PostServiceClient.GetPost(ctx, args) + ret, err := s.client.Post_PostServiceClient.GetPost(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationV2DevService_DependentMethod_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationV2DevService_DependentMethod_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -752,7 +773,11 @@ func (s *FederationV2DevService) resolve_Federation_V2Dev_PostV2Dev(ctx context. }); err != nil { return nil, err } - return s.resolve_Federation_V2Dev_User(ctx, args) + ret, err := s.resolve_Federation_V2Dev_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -903,13 +928,18 @@ func (s *FederationV2DevService) resolve_Federation_V2Dev_User(ctx context.Conte return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call user.UserService/GetUser", slog.Any("user.GetUserRequest", s.logvalue_User_GetUserRequest(args))) - return s.client.User_UserServiceClient.GetUser(ctx, args) + ret, err := s.client.User_UserServiceClient.GetUser(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationV2DevService_DependentMethod_User_UserService_GetUser, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx, FederationV2DevService_DependentMethod_User_UserService_GetUser, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // This section's codes are generated by the following proto definition. diff --git a/_examples/04_timeout/federation/federation_grpc_federation.pb.go b/_examples/04_timeout/federation/federation_grpc_federation.pb.go index 823f9005..9ebc87dd 100644 --- a/_examples/04_timeout/federation/federation_grpc_federation.pb.go +++ b/_examples/04_timeout/federation/federation_grpc_federation.pb.go @@ -218,7 +218,11 @@ func (s *FederationService) resolve_Federation_GetPostResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Federation_Post(ctx, args) + ret, err := s.resolve_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -298,13 +302,18 @@ func (s *FederationService) resolve_Federation_Post(ctx context.Context, req *Fe return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call post.PostService/GetPost", slog.Any("post.GetPostRequest", s.logvalue_Post_GetPostRequest(args))) - return s.client.Post_PostServiceClient.GetPost(ctx, args) + ret, err := s.client.Post_PostServiceClient.GetPost(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // This section's codes are generated by the following proto definition. diff --git a/_examples/05_async/federation/federation_grpc_federation.pb.go b/_examples/05_async/federation/federation_grpc_federation.pb.go index d630110b..b3455f29 100644 --- a/_examples/05_async/federation/federation_grpc_federation.pb.go +++ b/_examples/05_async/federation/federation_grpc_federation.pb.go @@ -269,7 +269,11 @@ func (s *FederationService) resolve_Org_Federation_A(ctx context.Context, req *F }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_AAArgument{} - return s.resolve_Org_Federation_AA(ctx, args) + ret, err := s.resolve_Org_Federation_AA(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -298,7 +302,11 @@ func (s *FederationService) resolve_Org_Federation_A(ctx context.Context, req *F }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_ABArgument{} - return s.resolve_Org_Federation_AB(ctx, args) + ret, err := s.resolve_Org_Federation_AB(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -687,7 +695,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_AArgument{} - return s.resolve_Org_Federation_A(ctx, args) + ret, err := s.resolve_Org_Federation_A(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -725,7 +737,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_C(ctx, args) + ret, err := s.resolve_Org_Federation_C(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -753,7 +769,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_BArgument{} - return s.resolve_Org_Federation_B(ctx, args) + ret, err := s.resolve_Org_Federation_B(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -791,7 +811,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_D(ctx, args) + ret, err := s.resolve_Org_Federation_D(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -849,7 +873,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_E(ctx, args) + ret, err := s.resolve_Org_Federation_E(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx2, err) @@ -879,7 +907,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_AArgument{} - return s.resolve_Org_Federation_A(ctx, args) + ret, err := s.resolve_Org_Federation_A(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -917,7 +949,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_C(ctx, args) + ret, err := s.resolve_Org_Federation_C(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -945,7 +981,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_BArgument{} - return s.resolve_Org_Federation_B(ctx, args) + ret, err := s.resolve_Org_Federation_B(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -983,7 +1023,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_D(ctx, args) + ret, err := s.resolve_Org_Federation_D(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -1041,7 +1085,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_F(ctx, args) + ret, err := s.resolve_Org_Federation_F(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx2, err) @@ -1069,7 +1117,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_GArgument{} - return s.resolve_Org_Federation_G(ctx, args) + ret, err := s.resolve_Org_Federation_G(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx2, err) @@ -1140,7 +1192,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_H(ctx, args) + ret, err := s.resolve_Org_Federation_H(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -1169,7 +1225,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_IArgument{} - return s.resolve_Org_Federation_I(ctx, args) + ret, err := s.resolve_Org_Federation_I(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -1207,7 +1267,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_J(ctx, args) + ret, err := s.resolve_Org_Federation_J(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) diff --git a/_examples/06_alias/federation/federation_grpc_federation.pb.go b/_examples/06_alias/federation/federation_grpc_federation.pb.go index 81d1488a..9ea3ccd7 100644 --- a/_examples/06_alias/federation/federation_grpc_federation.pb.go +++ b/_examples/06_alias/federation/federation_grpc_federation.pb.go @@ -276,7 +276,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }); err != nil { return nil, err } - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -372,13 +376,18 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.post.v2.PostService/GetPost", slog.Any("org.post.v2.GetPostRequest", s.logvalue_Org_Post_V2_GetPostRequest(args))) - return s.client.Org_Post_V2_PostServiceClient.GetPost(ctx, args) + ret, err := s.client.Org_Post_V2_PostServiceClient.GetPost(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_V2_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Org_Post_V2_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -538,13 +547,18 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.post.PostService/GetPost", slog.Any("org.post.GetPostRequest", s.logvalue_Org_Post_GetPostRequest(args))) - return s.client.Org_Post_PostServiceClient.GetPost(ctx, args) + ret, err := s.client.Org_Post_PostServiceClient.GetPost(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. diff --git a/_examples/07_autobind/federation/federation_grpc_federation.pb.go b/_examples/07_autobind/federation/federation_grpc_federation.pb.go index c0a64b54..d8695b05 100644 --- a/_examples/07_autobind/federation/federation_grpc_federation.pb.go +++ b/_examples/07_autobind/federation/federation_grpc_federation.pb.go @@ -226,7 +226,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }); err != nil { return nil, err } - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -307,13 +311,18 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call post.PostService/GetPost", slog.Any("post.GetPostRequest", s.logvalue_Post_GetPostRequest(args))) - return s.client.Post_PostServiceClient.GetPost(ctx, args) + ret, err := s.client.Post_PostServiceClient.GetPost(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -374,7 +383,11 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req }); err != nil { return nil, err } - return s.resolve_Org_Federation_User(ctx, args) + ret, err := s.resolve_Org_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) diff --git a/_examples/08_literal/federation/federation_grpc_federation.pb.go b/_examples/08_literal/federation/federation_grpc_federation.pb.go index 6622dcfd..b248aa65 100644 --- a/_examples/08_literal/federation/federation_grpc_federation.pb.go +++ b/_examples/08_literal/federation/federation_grpc_federation.pb.go @@ -655,13 +655,18 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call content.ContentService/GetContent", slog.Any("content.GetContentRequest", s.logvalue_Content_GetContentRequest(args))) - return s.client.Content_ContentServiceClient.GetContent(ctx, args) + ret, err := s.client.Content_ContentServiceClient.GetContent(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Content_ContentService_GetContent, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx, FederationService_DependentMethod_Content_ContentService_GetContent, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // This section's codes are generated by the following proto definition. diff --git a/_examples/09_multi_user/federation/federation_grpc_federation.pb.go b/_examples/09_multi_user/federation/federation_grpc_federation.pb.go index 2f9e8d2c..2b119d0a 100644 --- a/_examples/09_multi_user/federation/federation_grpc_federation.pb.go +++ b/_examples/09_multi_user/federation/federation_grpc_federation.pb.go @@ -254,7 +254,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_UserIDArgument{} - return s.resolve_Org_Federation_UserID(ctx, args) + ret, err := s.resolve_Org_Federation_UserID(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -292,7 +296,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_User(ctx, args) + ret, err := s.resolve_Org_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -321,7 +329,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_UserIDArgument{} - return s.resolve_Org_Federation_UserID(ctx, args) + ret, err := s.resolve_Org_Federation_UserID(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -359,7 +371,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_User(ctx, args) + ret, err := s.resolve_Org_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -477,7 +493,11 @@ func (s *FederationService) resolve_Org_Federation_User(ctx context.Context, req }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_SubArgument{} - return s.resolve_Org_Federation_Sub(ctx, args) + ret, err := s.resolve_Org_Federation_Sub(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -520,13 +540,18 @@ func (s *FederationService) resolve_Org_Federation_User(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call user.UserService/GetUser", slog.Any("user.GetUserRequest", s.logvalue_User_GetUserRequest(args))) - return s.client.User_UserServiceClient.GetUser(ctx, args) + ret, err := s.client.User_UserServiceClient.GetUser(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_User_UserService_GetUser, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_User_UserService_GetUser, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -617,7 +642,11 @@ func (s *FederationService) resolve_Org_Federation_UserID(ctx context.Context, r }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_SubArgument{} - return s.resolve_Org_Federation_Sub(ctx, args) + ret, err := s.resolve_Org_Federation_Sub(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) diff --git a/_examples/10_oneof/federation/federation_grpc_federation.pb.go b/_examples/10_oneof/federation/federation_grpc_federation.pb.go index 9f69a820..d7b74439 100644 --- a/_examples/10_oneof/federation/federation_grpc_federation.pb.go +++ b/_examples/10_oneof/federation/federation_grpc_federation.pb.go @@ -242,7 +242,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_MessageSelectionArgument{} - return s.resolve_Org_Federation_MessageSelection(ctx, args) + ret, err := s.resolve_Org_Federation_MessageSelection(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -284,7 +288,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_UserSelection(ctx, args) + ret, err := s.resolve_Org_Federation_UserSelection(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -516,13 +524,18 @@ func (s *FederationService) resolve_Org_Federation_User(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call user.UserService/GetUser", slog.Any("user.GetUserRequest", s.logvalue_User_GetUserRequest(args))) - return s.client.User_UserServiceClient.GetUser(ctx, args) + ret, err := s.client.User_UserServiceClient.GetUser(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_User_UserService_GetUser, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx, FederationService_DependentMethod_User_UserService_GetUser, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // create a message value to be returned. @@ -655,7 +668,11 @@ func (s *FederationService) resolve_Org_Federation_UserSelection(ctx context.Con }); err != nil { return nil, err } - return s.resolve_Org_Federation_User(ctx, args) + ret, err := s.resolve_Org_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -734,7 +751,11 @@ func (s *FederationService) resolve_Org_Federation_UserSelection(ctx context.Con }); err != nil { return nil, err } - return s.resolve_Org_Federation_User(ctx, args) + ret, err := s.resolve_Org_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -813,7 +834,11 @@ func (s *FederationService) resolve_Org_Federation_UserSelection(ctx context.Con }); err != nil { return nil, err } - return s.resolve_Org_Federation_User(ctx, args) + ret, err := s.resolve_Org_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) diff --git a/_examples/11_multi_service/federation/federation_grpc_federation.pb.go b/_examples/11_multi_service/federation/federation_grpc_federation.pb.go index ddfe04c4..5df23db4 100644 --- a/_examples/11_multi_service/federation/federation_grpc_federation.pb.go +++ b/_examples/11_multi_service/federation/federation_grpc_federation.pb.go @@ -302,7 +302,11 @@ func (s *FederationService) resolve_Federation_GetPostResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Federation_PostArgument{} - return s.resolve_Federation_Post(ctx, args) + ret, err := s.resolve_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -462,7 +466,11 @@ func (s *FederationService) resolve_Federation_Post(ctx context.Context, req *Fe }); err != nil { return nil, err } - return s.resolve_Federation_Reaction(ctx, args) + ret, err := s.resolve_Federation_Reaction(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -519,7 +527,11 @@ func (s *FederationService) resolve_Federation_Post(ctx context.Context, req *Fe }); err != nil { return nil, err } - return s.resolve_Federation_User(ctx, args) + ret, err := s.resolve_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -1192,7 +1204,11 @@ func (s *PrivateService) resolve_Federation_GetPostResponse(ctx context.Context, }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &PrivateService_Federation_PostArgument{} - return s.resolve_Federation_Post(ctx, args) + ret, err := s.resolve_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -1352,7 +1368,11 @@ func (s *PrivateService) resolve_Federation_Post(ctx context.Context, req *Priva }); err != nil { return nil, err } - return s.resolve_Federation_Reaction(ctx, args) + ret, err := s.resolve_Federation_Reaction(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -1409,7 +1429,11 @@ func (s *PrivateService) resolve_Federation_Post(ctx context.Context, req *Priva }); err != nil { return nil, err } - return s.resolve_Federation_User(ctx, args) + ret, err := s.resolve_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -1989,7 +2013,11 @@ func (s *DebugService) resolve_Federation_GetStatusResponse(ctx context.Context, }); err != nil { return nil, err } - return s.resolve_Federation_User(ctx, args) + ret, err := s.resolve_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) diff --git a/_examples/11_multi_service/federation/other_grpc_federation.pb.go b/_examples/11_multi_service/federation/other_grpc_federation.pb.go index 146249c5..524bc63c 100644 --- a/_examples/11_multi_service/federation/other_grpc_federation.pb.go +++ b/_examples/11_multi_service/federation/other_grpc_federation.pb.go @@ -226,7 +226,11 @@ func (s *OtherService) resolve_Federation_GetResponse(ctx context.Context, req * }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &OtherService_Federation_PostArgument{} - return s.resolve_Federation_Post(ctx, args) + ret, err := s.resolve_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -384,7 +388,11 @@ func (s *OtherService) resolve_Federation_Post(ctx context.Context, req *OtherSe }); err != nil { return nil, err } - return s.resolve_Federation_Reaction(ctx, args) + ret, err := s.resolve_Federation_Reaction(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -441,7 +449,11 @@ func (s *OtherService) resolve_Federation_Post(ctx context.Context, req *OtherSe }); err != nil { return nil, err } - return s.resolve_Federation_User(ctx, args) + ret, err := s.resolve_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) diff --git a/_examples/12_validation/federation/federation_grpc_federation.pb.go b/_examples/12_validation/federation/federation_grpc_federation.pb.go index 27f35437..072c4bfa 100644 --- a/_examples/12_validation/federation/federation_grpc_federation.pb.go +++ b/_examples/12_validation/federation/federation_grpc_federation.pb.go @@ -349,7 +349,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_PostArgument{} - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx2, err) @@ -429,7 +433,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_PostArgument{} - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -507,7 +515,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_PostArgument{} - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -592,7 +604,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_PostArgument{} - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -672,7 +688,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_PostArgument{} - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx4, err) @@ -750,7 +770,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_PostArgument{} - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx4, err) @@ -833,7 +857,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_PostArgument{} - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -965,7 +993,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }); err != nil { return nil, err } - return s.resolve_Org_Federation_CustomMessage(ctx, args) + ret, err := s.resolve_Org_Federation_CustomMessage(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -1007,7 +1039,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }); err != nil { return nil, err } - return s.resolve_Org_Federation_CustomMessage(ctx, args) + ret, err := s.resolve_Org_Federation_CustomMessage(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -1115,7 +1151,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_PostArgument{} - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx2, err) @@ -1238,7 +1278,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }); err != nil { return nil, err } - return s.resolve_Org_Federation_CustomHandlerMessage(ctx, args) + ret, err := s.resolve_Org_Federation_CustomHandlerMessage(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) diff --git a/_examples/13_map/federation/federation_grpc_federation.pb.go b/_examples/13_map/federation/federation_grpc_federation.pb.go index 766da0f8..87e5a47a 100644 --- a/_examples/13_map/federation/federation_grpc_federation.pb.go +++ b/_examples/13_map/federation/federation_grpc_federation.pb.go @@ -250,7 +250,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostsResponse(ctx context. }); err != nil { return nil, err } - return s.resolve_Org_Federation_Posts(ctx, args) + ret, err := s.resolve_Org_Federation_Posts(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -348,13 +352,18 @@ func (s *FederationService) resolve_Org_Federation_Posts(ctx context.Context, re return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call post.PostService/GetPosts", slog.Any("post.GetPostsRequest", s.logvalue_Post_GetPostsRequest(args))) - return s.client.Post_PostServiceClient.GetPosts(ctx, args) + ret, err := s.client.Post_PostServiceClient.GetPosts(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPosts, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Post_PostService_GetPosts, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -450,13 +459,18 @@ func (s *FederationService) resolve_Org_Federation_Posts(ctx context.Context, re return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call post.PostService/GetPosts", slog.Any("post.GetPostsRequest", s.logvalue_Post_GetPostsRequest(args))) - return s.client.Post_PostServiceClient.GetPosts(ctx, args) + ret, err := s.client.Post_PostServiceClient.GetPosts(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPosts, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Post_PostService_GetPosts, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -563,13 +577,18 @@ func (s *FederationService) resolve_Org_Federation_Posts(ctx context.Context, re return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call post.PostService/GetPosts", slog.Any("post.GetPostsRequest", s.logvalue_Post_GetPostsRequest(args))) - return s.client.Post_PostServiceClient.GetPosts(ctx, args) + ret, err := s.client.Post_PostServiceClient.GetPosts(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPosts, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Post_PostService_GetPosts, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -811,13 +830,18 @@ func (s *FederationService) resolve_Org_Federation_User(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call user.UserService/GetUser", slog.Any("user.GetUserRequest", s.logvalue_User_GetUserRequest(args))) - return s.client.User_UserServiceClient.GetUser(ctx, args) + ret, err := s.client.User_UserServiceClient.GetUser(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_User_UserService_GetUser, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx, FederationService_DependentMethod_User_UserService_GetUser, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // This section's codes are generated by the following proto definition. diff --git a/_examples/14_condition/federation/federation_grpc_federation.pb.go b/_examples/14_condition/federation/federation_grpc_federation.pb.go index 56c4da75..73815304 100644 --- a/_examples/14_condition/federation/federation_grpc_federation.pb.go +++ b/_examples/14_condition/federation/federation_grpc_federation.pb.go @@ -227,7 +227,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }); err != nil { return nil, err } - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -317,13 +321,18 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call post.PostService/GetPost", slog.Any("post.GetPostRequest", s.logvalue_Post_GetPostRequest(args))) - return s.client.Post_PostServiceClient.GetPost(ctx, args) + ret, err := s.client.Post_PostServiceClient.GetPost(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -409,13 +418,18 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call post.PostService/GetPost", slog.Any("post.GetPostRequest", s.logvalue_Post_GetPostRequest(args))) - return s.client.Post_PostServiceClient.GetPost(ctx, args) + ret, err := s.client.Post_PostServiceClient.GetPost(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -476,7 +490,11 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req }); err != nil { return nil, err } - return s.resolve_Org_Federation_User(ctx, args) + ret, err := s.resolve_Org_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) diff --git a/_examples/17_error_handler/federation/federation_grpc_federation.pb.go b/_examples/17_error_handler/federation/federation_grpc_federation.pb.go index cde842b6..725d316a 100644 --- a/_examples/17_error_handler/federation/federation_grpc_federation.pb.go +++ b/_examples/17_error_handler/federation/federation_grpc_federation.pb.go @@ -270,7 +270,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }); err != nil { return nil, err } - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -389,135 +393,90 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call post.PostService/GetPost", slog.Any("post.GetPostRequest", s.logvalue_Post_GetPostRequest(args))) - return s.client.Post_PostServiceClient.GetPost(ctx, args) - }, - }); err != nil { - grpcfed.SetGRPCError(ctx, value, err) - type localStatusType struct { - status *grpcfed.Status - logLevel slog.Level - } - stat, handleErr := func() (*localStatusType, error) { - var stat *grpcfed.Status - - // This section's codes are generated by the following proto definition. - /* - def { - name: "id" - by: "$.id" - } - */ - if err := grpcfed.EvalDef(ctx, value, grpcfed.Def[string, *localValueType]{ - Name: `id`, - Type: grpcfed.CELStringType, - Setter: func(value *localValueType, v string) error { - value.vars.id = v - return nil - }, - By: `$.id`, - ByCacheIndex: 6, - }); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, err - } - if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ - Value: value, - Expr: `error.precondition_failures[?0].violations[?0].subject == optional.of('bar') && error.localized_messages[?0].message == optional.of('hello') && error.custom_messages[?0].id == optional.of('xxx')`, - CacheIndex: 7, - Body: func(value *localValueType) error { - errmsg, err := grpcfed.EvalCEL(ctx, &grpcfed.EvalCELRequest{ - Value: value, - Expr: `'this is custom error message'`, - OutType: reflect.TypeOf(""), - CacheIndex: 8, - }) - if err != nil { - return err - } - errorMessage := errmsg.(string) - var details []grpcfed.ProtoMessage - if _, err := func() (any, error) { - - // This section's codes are generated by the following proto definition. - /* - def { - name: "localized_msg" - message { - name: "LocalizedMessage" - args { name: "value", by: "id" } - } - } - */ - if err := grpcfed.EvalDef(ctx, value, grpcfed.Def[*LocalizedMessage, *localValueType]{ - Name: `localized_msg`, - Type: grpcfed.CELObjectType("org.federation.LocalizedMessage"), - Setter: func(value *localValueType, v *LocalizedMessage) error { - value.vars.localized_msg = v - return nil - }, - Message: func(ctx context.Context, value *localValueType) (any, error) { - args := &FederationService_Org_Federation_LocalizedMessageArgument{} - // { name: "value", by: "id" } - if err := grpcfed.SetCELValue(ctx, &grpcfed.SetCELValueParam[string]{ - Value: value, - Expr: `id`, - CacheIndex: 9, - Setter: func(v string) error { - args.Value = v - return nil - }, - }); err != nil { - return nil, err - } - return s.resolve_Org_Federation_LocalizedMessage(ctx, args) - }, - }); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, err - } - return nil, nil - }(); err != nil { - return err + ret, err := s.client.Post_PostServiceClient.GetPost(ctx, args) + if err != nil { + grpcfed.SetGRPCError(ctx, value, err) + type localStatusType struct { + status *grpcfed.Status + logLevel slog.Level + } + stat, handleErr := func() (*localStatusType, error) { + var stat *grpcfed.Status + + // This section's codes are generated by the following proto definition. + /* + def { + name: "id" + by: "$.id" + } + */ + if err := grpcfed.EvalDef(ctx, value, grpcfed.Def[string, *localValueType]{ + Name: `id`, + Type: grpcfed.CELStringType, + Setter: func(value *localValueType, v string) error { + value.vars.id = v + return nil + }, + By: `$.id`, + ByCacheIndex: 6, + }); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ Value: value, - Expr: `true`, - CacheIndex: 10, + Expr: `error.precondition_failures[?0].violations[?0].subject == optional.of('bar') && error.localized_messages[?0].message == optional.of('hello') && error.custom_messages[?0].id == optional.of('xxx')`, + CacheIndex: 7, Body: func(value *localValueType) error { + errmsg, err := grpcfed.EvalCEL(ctx, &grpcfed.EvalCELRequest{ + Value: value, + Expr: `'this is custom error message'`, + OutType: reflect.TypeOf(""), + CacheIndex: 8, + }) + if err != nil { + return err + } + errorMessage := errmsg.(string) + var details []grpcfed.ProtoMessage if _, err := func() (any, error) { // This section's codes are generated by the following proto definition. /* def { - name: "_def0_err_detail0_msg0" + name: "localized_msg" message { - name: "CustomMessage" - args { name: "error_info", by: "error" } + name: "LocalizedMessage" + args { name: "value", by: "id" } } } */ - if err := grpcfed.EvalDef(ctx, value, grpcfed.Def[*CustomMessage, *localValueType]{ - Name: `_def0_err_detail0_msg0`, - Type: grpcfed.CELObjectType("org.federation.CustomMessage"), - Setter: func(value *localValueType, v *CustomMessage) error { - value.vars._def0_err_detail0_msg0 = v + if err := grpcfed.EvalDef(ctx, value, grpcfed.Def[*LocalizedMessage, *localValueType]{ + Name: `localized_msg`, + Type: grpcfed.CELObjectType("org.federation.LocalizedMessage"), + Setter: func(value *localValueType, v *LocalizedMessage) error { + value.vars.localized_msg = v return nil }, Message: func(ctx context.Context, value *localValueType) (any, error) { - args := &FederationService_Org_Federation_CustomMessageArgument{} - // { name: "error_info", by: "error" } - if err := grpcfed.SetCELValue(ctx, &grpcfed.SetCELValueParam[*grpcfedcel.Error]{ + args := &FederationService_Org_Federation_LocalizedMessageArgument{} + // { name: "value", by: "id" } + if err := grpcfed.SetCELValue(ctx, &grpcfed.SetCELValueParam[string]{ Value: value, - Expr: `error`, - CacheIndex: 11, - Setter: func(v *grpcfedcel.Error) error { - args.ErrorInfo = v + Expr: `id`, + CacheIndex: 9, + Setter: func(v string) error { + args.Value = v return nil }, }); err != nil { return nil, err } - return s.resolve_Org_Federation_CustomMessage(ctx, args) + ret, err := s.resolve_Org_Federation_LocalizedMessage(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -527,169 +486,227 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req }(); err != nil { return err } - if detail := grpcfed.CustomMessage(ctx, &grpcfed.CustomMessageParam{ - Value: value, - MessageValueName: "_def0_err_detail0_msg0", - CacheIndex: 12, - MessageIndex: 0, - }); detail != nil { - details = append(details, detail) - } - { - detail, err := grpcfed.EvalCEL(ctx, &grpcfed.EvalCELRequest{ - Value: value, - Expr: `post.Post{id: 'foo'}`, - OutType: reflect.TypeOf((*post.Post)(nil)), - CacheIndex: 13, - }) - if err != nil { - grpcfed.Logger(ctx).ErrorContext(ctx, "failed setting error details", slog.String("error", err.Error())) - } - if detail != nil { - details = append(details, detail.(grpcfed.ProtoMessage)) - } - } - if detail := grpcfed.PreconditionFailure(ctx, value, []*grpcfed.PreconditionFailureViolation{ - { - Type: `'some-type'`, - Subject: `'some-subject'`, - Desc: `'some-description'`, - TypeCacheIndex: 14, - SubjectCacheIndex: 15, - DescCacheIndex: 16, + if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ + Value: value, + Expr: `true`, + CacheIndex: 10, + Body: func(value *localValueType) error { + if _, err := func() (any, error) { + + // This section's codes are generated by the following proto definition. + /* + def { + name: "_def0_err_detail0_msg0" + message { + name: "CustomMessage" + args { name: "error_info", by: "error" } + } + } + */ + if err := grpcfed.EvalDef(ctx, value, grpcfed.Def[*CustomMessage, *localValueType]{ + Name: `_def0_err_detail0_msg0`, + Type: grpcfed.CELObjectType("org.federation.CustomMessage"), + Setter: func(value *localValueType, v *CustomMessage) error { + value.vars._def0_err_detail0_msg0 = v + return nil + }, + Message: func(ctx context.Context, value *localValueType) (any, error) { + args := &FederationService_Org_Federation_CustomMessageArgument{} + // { name: "error_info", by: "error" } + if err := grpcfed.SetCELValue(ctx, &grpcfed.SetCELValueParam[*grpcfedcel.Error]{ + Value: value, + Expr: `error`, + CacheIndex: 11, + Setter: func(v *grpcfedcel.Error) error { + args.ErrorInfo = v + return nil + }, + }); err != nil { + return nil, err + } + ret, err := s.resolve_Org_Federation_CustomMessage(ctx, args) + if err != nil { + return nil, err + } + return ret, nil + }, + }); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err + } + return nil, nil + }(); err != nil { + return err + } + if detail := grpcfed.CustomMessage(ctx, &grpcfed.CustomMessageParam{ + Value: value, + MessageValueName: "_def0_err_detail0_msg0", + CacheIndex: 12, + MessageIndex: 0, + }); detail != nil { + details = append(details, detail) + } + { + detail, err := grpcfed.EvalCEL(ctx, &grpcfed.EvalCELRequest{ + Value: value, + Expr: `post.Post{id: 'foo'}`, + OutType: reflect.TypeOf((*post.Post)(nil)), + CacheIndex: 13, + }) + if err != nil { + grpcfed.Logger(ctx).ErrorContext(ctx, "failed setting error details", slog.String("error", err.Error())) + } + if detail != nil { + details = append(details, detail.(grpcfed.ProtoMessage)) + } + } + if detail := grpcfed.PreconditionFailure(ctx, value, []*grpcfed.PreconditionFailureViolation{ + { + Type: `'some-type'`, + Subject: `'some-subject'`, + Desc: `'some-description'`, + TypeCacheIndex: 14, + SubjectCacheIndex: 15, + DescCacheIndex: 16, + }, + }); detail != nil { + details = append(details, detail) + } + if detail := grpcfed.LocalizedMessage(ctx, &grpcfed.LocalizedMessageParam{ + Value: value, + Locale: "en-US", + Message: `localized_msg.value`, + CacheIndex: 17, + }); detail != nil { + details = append(details, detail) + } + return nil }, - }); detail != nil { - details = append(details, detail) + }); err != nil { + return err + } + status := grpcfed.NewGRPCStatus(grpcfed.FailedPreconditionCode, errorMessage) + statusWithDetails, err := status.WithDetails(details...) + if err != nil { + grpcfed.Logger(ctx).ErrorContext(ctx, "failed setting error details", slog.String("error", err.Error())) + stat = status + } else { + stat = statusWithDetails } - if detail := grpcfed.LocalizedMessage(ctx, &grpcfed.LocalizedMessageParam{ + return nil + }, + }); err != nil { + return nil, err + } + if stat != nil { + return &localStatusType{status: stat, logLevel: slog.LevelError}, nil + } + if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ + Value: value, + Expr: `error.code == google.rpc.Code.INVALID_ARGUMENT`, + CacheIndex: 18, + Body: func(value *localValueType) error { + errmsg, err := grpcfed.EvalCEL(ctx, &grpcfed.EvalCELRequest{ Value: value, - Locale: "en-US", - Message: `localized_msg.value`, - CacheIndex: 17, - }); detail != nil { - details = append(details, detail) + Expr: `'this is custom log level'`, + OutType: reflect.TypeOf(""), + CacheIndex: 19, + }) + if err != nil { + return err } + errorMessage := errmsg.(string) + stat = grpcfed.NewGRPCStatus(grpcfed.InvalidArgumentCode, errorMessage) return nil }, }); err != nil { - return err + return nil, err } - status := grpcfed.NewGRPCStatus(grpcfed.FailedPreconditionCode, errorMessage) - statusWithDetails, err := status.WithDetails(details...) - if err != nil { - grpcfed.Logger(ctx).ErrorContext(ctx, "failed setting error details", slog.String("error", err.Error())) - stat = status - } else { - stat = statusWithDetails + if stat != nil { + return &localStatusType{status: stat, logLevel: slog.LevelWarn}, nil } - return nil - }, - }); err != nil { - return nil, err - } - if stat != nil { - return &localStatusType{status: stat, logLevel: slog.LevelError}, nil - } - if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ - Value: value, - Expr: `error.code == google.rpc.Code.INVALID_ARGUMENT`, - CacheIndex: 18, - Body: func(value *localValueType) error { - errmsg, err := grpcfed.EvalCEL(ctx, &grpcfed.EvalCELRequest{ + if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ Value: value, - Expr: `'this is custom log level'`, - OutType: reflect.TypeOf(""), - CacheIndex: 19, - }) - if err != nil { - return err + Expr: `error.code == google.rpc.Code.UNIMPLEMENTED`, + CacheIndex: 20, + Body: func(value *localValueType) error { + stat = grpcfed.NewGRPCStatus(grpcfed.OKCode, "ignore error") + if err := grpcfed.IgnoreAndResponse(ctx, value, grpcfed.Def[*post.GetPostResponse, *localValueType]{ + Name: "res", + Type: grpcfed.CELObjectType("post.GetPostResponse"), + Setter: func(value *localValueType, v *post.GetPostResponse) error { + ret = v // assign customized response to the result value. + return nil + }, + By: `post.GetPostResponse{post: post.Post{id: 'anonymous'}}`, + ByCacheIndex: 21, + }); err != nil { + grpcfed.Logger(ctx).ErrorContext(ctx, "failed to set response when ignored", slog.String("error", err.Error())) + return nil + } + return nil + }, + }); err != nil { + return nil, err } - errorMessage := errmsg.(string) - stat = grpcfed.NewGRPCStatus(grpcfed.InvalidArgumentCode, errorMessage) - return nil - }, - }); err != nil { - return nil, err - } - if stat != nil { - return &localStatusType{status: stat, logLevel: slog.LevelWarn}, nil - } - if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ - Value: value, - Expr: `error.code == google.rpc.Code.UNIMPLEMENTED`, - CacheIndex: 20, - Body: func(value *localValueType) error { - stat = grpcfed.NewGRPCStatus(grpcfed.OKCode, "ignore error") - if err := grpcfed.IgnoreAndResponse(ctx, value, grpcfed.Def[*post.GetPostResponse, *localValueType]{ - Name: "res", - Type: grpcfed.CELObjectType("post.GetPostResponse"), - Setter: func(value *localValueType, v *post.GetPostResponse) error { - value.vars.res = v + if stat != nil { + return &localStatusType{status: stat, logLevel: slog.LevelError}, nil + } + if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ + Value: value, + Expr: `true`, + CacheIndex: 22, + Body: func(value *localValueType) error { + stat = grpcfed.NewGRPCStatus(grpcfed.OKCode, "ignore error") return nil }, - By: `post.GetPostResponse{post: post.Post{id: 'anonymous'}}`, - ByCacheIndex: 21, }); err != nil { - grpcfed.Logger(ctx).ErrorContext(ctx, "failed to set response when ignored", slog.String("error", err.Error())) - return nil + return nil, err } - return nil - }, - }); err != nil { - return nil, err - } - if stat != nil { - return &localStatusType{status: stat, logLevel: slog.LevelError}, nil - } - if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ - Value: value, - Expr: `true`, - CacheIndex: 22, - Body: func(value *localValueType) error { - stat = grpcfed.NewGRPCStatus(grpcfed.OKCode, "ignore error") - return nil - }, - }); err != nil { - return nil, err - } - if stat != nil { - return &localStatusType{status: stat, logLevel: slog.LevelError}, nil - } - if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ - Value: value, - Expr: `true`, - CacheIndex: 23, - Body: func(value *localValueType) error { - errorMessage := "error" - stat = grpcfed.NewGRPCStatus(grpcfed.CancelledCode, errorMessage) - return nil - }, - }); err != nil { - return nil, err - } - if stat != nil { - return &localStatusType{status: stat, logLevel: slog.LevelError}, nil - } - return nil, nil - }() - if handleErr != nil { - grpcfed.Logger(ctx).ErrorContext(ctx, "failed to handle error", slog.String("error", handleErr.Error())) - // If it fails during error handling, return the original error. - if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } - } else if stat != nil { - if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPost, stat.status.Err()); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, stat.logLevel, grpcfed.LogAttrs(ctx)) - } - } else { - if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + if stat != nil { + return &localStatusType{status: stat, logLevel: slog.LevelError}, nil + } + if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ + Value: value, + Expr: `true`, + CacheIndex: 23, + Body: func(value *localValueType) error { + errorMessage := "error" + stat = grpcfed.NewGRPCStatus(grpcfed.CancelledCode, errorMessage) + return nil + }, + }); err != nil { + return nil, err + } + if stat != nil { + return &localStatusType{status: stat, logLevel: slog.LevelError}, nil + } + return nil, nil + }() + if handleErr != nil { + grpcfed.Logger(ctx).ErrorContext(ctx, "failed to handle error", slog.String("error", handleErr.Error())) + // If it fails during error handling, return the original error. + if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } else if stat != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPost, stat.status.Err()); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, stat.logLevel, grpcfed.LogAttrs(ctx)) + } + } else { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } } - } + return ret, nil + }, + }); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // This section's codes are generated by the following proto definition. diff --git a/_examples/19_retry/federation/federation_grpc_federation.pb.go b/_examples/19_retry/federation/federation_grpc_federation.pb.go index 76452748..c2b026d5 100644 --- a/_examples/19_retry/federation/federation_grpc_federation.pb.go +++ b/_examples/19_retry/federation/federation_grpc_federation.pb.go @@ -213,7 +213,11 @@ func (s *FederationService) resolve_Federation_GetPostResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Federation_Post(ctx, args) + ret, err := s.resolve_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -274,7 +278,7 @@ func (s *FederationService) resolve_Federation_Post(ctx context.Context, req *Fe return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call post.PostService/GetPost", slog.Any("post.GetPostRequest", s.logvalue_Post_GetPostRequest(args))) - return grpcfed.WithTimeout[post.GetPostResponse](ctx, "post.PostService/GetPost", 10000000000 /* 10s */, func(ctx context.Context) (*post.GetPostResponse, error) { + ret, err := grpcfed.WithTimeout[post.GetPostResponse](ctx, "post.PostService/GetPost", 10000000000 /* 10s */, func(ctx context.Context) (*post.GetPostResponse, error) { b := grpcfed.NewConstantBackOff(30000000) /* 30ms */ b = grpcfed.BackOffWithMaxRetries(b, 3) b = grpcfed.BackOffWithContext(b, ctx) @@ -288,12 +292,17 @@ func (s *FederationService) resolve_Federation_Post(ctx context.Context, req *Fe }, }) }) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx, FederationService_DependentMethod_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // create a message value to be returned. diff --git a/generator/templates/error_handler.go.tmpl b/generator/templates/error_handler.go.tmpl index 08380edf..f6442d29 100644 --- a/generator/templates/error_handler.go.tmpl +++ b/generator/templates/error_handler.go.tmpl @@ -1,10 +1,9 @@ {{- define "errorHandler" }} -{{- $ctx := .Ctx }} {{- $def := .Definition }} {{- if $def.HasErrorHandler }} {{- $grpcErrors := $def.GRPCErrors }} {{- if $grpcErrors }} -grpcfed.SetGRPCError({{ $ctx }}, value, err) +grpcfed.SetGRPCError(ctx, value, err) type localStatusType struct { status *grpcfed.Status logLevel slog.Level @@ -16,7 +15,7 @@ stat, handleErr := func() (*localStatusType, error) { {{- if .VariableDefinitionSet }} {{- template "evalDefSet" .VariableDefinitionSet }} {{- end }} - if err := grpcfed.If({{ $ctx }}, &grpcfed.IfParam[*localValueType]{ + if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ Value: value, Expr: `{{ .If.Expr }}`, CacheIndex: {{ $def.CELCacheIndex }}, @@ -26,17 +25,17 @@ stat, handleErr := func() (*localStatusType, error) { return nil {{- else if .IgnoreAndResponse }} stat = grpcfed.NewGRPCStatus(grpcfed.OKCode, "ignore error") - if err := grpcfed.IgnoreAndResponse({{ $ctx }}, value, grpcfed.Def[{{ $def.Type }}, *localValueType]{ + if err := grpcfed.IgnoreAndResponse(ctx, value, grpcfed.Def[{{ $def.Type }}, *localValueType]{ Name: "{{ $def.Key }}", Type: {{ $def.CELType }}, Setter: func(value *localValueType, v {{ $def.Type }}) error { - value.vars.{{ $def.Key }} = v + ret = v // assign customized response to the result value. return nil }, By: `{{ .IgnoreAndResponse.Expr }}`, ByCacheIndex: {{ $def.CELCacheIndex }}, }); err != nil { - grpcfed.Logger({{ $ctx }}).ErrorContext({{ $ctx }}, "failed to set response when ignored", slog.String("error", err.Error())) + grpcfed.Logger(ctx).ErrorContext(ctx, "failed to set response when ignored", slog.String("error", err.Error())) return nil } return nil @@ -69,7 +68,7 @@ stat, handleErr := func() (*localStatusType, error) { return err } {{- end }} - if err := grpcfed.If({{ $ctx }}, &grpcfed.IfParam[*localValueType]{ + if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ Value: value, Expr: `{{ .If.Expr }}`, CacheIndex: {{ $def.CELCacheIndex }}, @@ -82,7 +81,7 @@ stat, handleErr := func() (*localStatusType, error) { return err } {{- range $idx, $def := .MessageSet.Definitions }} - if detail := grpcfed.CustomMessage({{ $ctx }}, &grpcfed.CustomMessageParam{ + if detail := grpcfed.CustomMessage(ctx, &grpcfed.CustomMessageParam{ Value: value, MessageValueName: "{{ $def.Name }}", CacheIndex: {{ $def.CELCacheIndex }}, @@ -102,7 +101,7 @@ stat, handleErr := func() (*localStatusType, error) { CacheIndex: {{ $def.CELCacheIndex }}, }) if err != nil { - grpcfed.Logger({{ $ctx }}).ErrorContext({{ $ctx }}, "failed setting error details", slog.String("error", err.Error())) + grpcfed.Logger(ctx).ErrorContext(ctx, "failed setting error details", slog.String("error", err.Error())) } if detail != nil { details = append(details, detail.(grpcfed.ProtoMessage)) @@ -131,7 +130,7 @@ stat, handleErr := func() (*localStatusType, error) { status := grpcfed.NewGRPCStatus(grpcfed.{{ .GoGRPCStatusCode }}, errorMessage) statusWithDetails, err := status.WithDetails(details...) if err != nil { - grpcfed.Logger({{ $ctx }}).ErrorContext({{ $ctx }}, "failed setting error details", slog.String("error", err.Error())) + grpcfed.Logger(ctx).ErrorContext(ctx, "failed setting error details", slog.String("error", err.Error())) stat = status } else { stat = statusWithDetails @@ -152,31 +151,30 @@ stat, handleErr := func() (*localStatusType, error) { return nil, nil }() if handleErr != nil { - grpcfed.Logger({{ $ctx }}).ErrorContext({{ $ctx }}, "failed to handle error", slog.String("error", handleErr.Error())) + grpcfed.Logger(ctx).ErrorContext(ctx, "failed to handle error", slog.String("error", handleErr.Error())) // If it fails during error handling, return the original error. - if err := s.errorHandler({{ $ctx }}, {{ $def.ServiceName }}_DependentMethod_{{ $def.DependentMethodName }}, err); err != nil { - grpcfed.RecordErrorToSpan({{ $ctx }}, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs({{ $ctx }})) + if err := s.errorHandler(ctx, {{ $def.ServiceName }}_DependentMethod_{{ $def.DependentMethodName }}, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) } } else if stat != nil { - if err := s.errorHandler({{ $ctx }}, {{ $def.ServiceName }}_DependentMethod_{{ $def.DependentMethodName }}, stat.status.Err()); err != nil { - grpcfed.RecordErrorToSpan({{ $ctx }}, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, stat.logLevel, grpcfed.LogAttrs({{ $ctx }})) + if err := s.errorHandler(ctx, {{ $def.ServiceName }}_DependentMethod_{{ $def.DependentMethodName }}, stat.status.Err()); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, stat.logLevel, grpcfed.LogAttrs(ctx)) } } else { - if err := s.errorHandler({{ $ctx }}, {{ $def.ServiceName }}_DependentMethod_{{ $def.DependentMethodName }}, err); err != nil { - grpcfed.RecordErrorToSpan({{ $ctx }}, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs({{ $ctx }})) + if err := s.errorHandler(ctx, {{ $def.ServiceName }}_DependentMethod_{{ $def.DependentMethodName }}, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) } } {{- else }} -if err := s.errorHandler({{ $ctx }}, {{ $def.ServiceName }}_DependentMethod_{{ $def.DependentMethodName }}, err); err != nil { - grpcfed.RecordErrorToSpan({{ $ctx }}, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs({{ $ctx }})) +if err := s.errorHandler(ctx, {{ $def.ServiceName }}_DependentMethod_{{ $def.DependentMethodName }}, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) } {{- end }} {{- else }} -grpcfed.RecordErrorToSpan({{ $ctx }}, err) return nil, err {{- end }} {{- end }} diff --git a/generator/templates/eval.go.tmpl b/generator/templates/eval.go.tmpl index 82c988f3..773d63cf 100644 --- a/generator/templates/eval.go.tmpl +++ b/generator/templates/eval.go.tmpl @@ -80,7 +80,7 @@ grpcfed.EvalDef({{ $ctx }}, value, grpcfed.Def[{{ $def.Type }}, *localValueType] grpcfed.Logger(ctx).DebugContext(ctx, "call {{ $def.MethodFQDN }}", slog.Any("{{ $def.RequestTypeFQDN }}", s.logvalue_{{ $def.LogValueRequestType }}(args))) {{- end }} {{- if $def.UseTimeout }} - return grpcfed.WithTimeout[{{ $def.ReturnType }}](ctx, "{{ $def.MethodFQDN }}", {{ $def.Timeout }}, func(ctx context.Context) (*{{ $def.ReturnType }}, error) { + ret, err := grpcfed.WithTimeout[{{ $def.ReturnType }}](ctx, "{{ $def.MethodFQDN }}", {{ $def.Timeout }}, func(ctx context.Context) (*{{ $def.ReturnType }}, error) { {{- if $def.UseRetry }} {{- template "retry" (map "Retry" $def.Retry) }} return grpcfed.WithRetry(ctx, &grpcfed.RetryParam[{{ $def.ReturnType }}]{ @@ -98,7 +98,7 @@ grpcfed.EvalDef({{ $ctx }}, value, grpcfed.Def[{{ $def.Type }}, *localValueType] }) {{- else if $def.UseRetry }} {{- template "retry" (map "Retry" $def.Retry) }} - return grpcfed.WithRetry(ctx, &grpcfed.RetryParam[{{ $def.ReturnType }}]{ + ret, err := grpcfed.WithRetry(ctx, &grpcfed.RetryParam[{{ $def.ReturnType }}]{ Value: value, If: `{{ $def.Retry.If.Expr }}`, CacheIndex: {{ $def.CELCacheIndex }}, @@ -108,8 +108,12 @@ grpcfed.EvalDef({{ $ctx }}, value, grpcfed.Def[{{ $def.Type }}, *localValueType] }, }) {{- else }} - return s.{{ $def.Caller }}(ctx, args) + ret, err := s.{{ $def.Caller }}(ctx, args) {{- end }} + if err != nil { + {{- template "errorHandler" (map "Definition" $def) }} + } + return ret, nil }, {{- end }} }) @@ -122,7 +126,8 @@ grpcfed.EvalDef({{ $ctx }}, value, grpcfed.Def[{{ $def.Type }}, *localValueType] {{ .Definition.ProtoComment }} */ if err := {{- template "evalDef" (map "Ctx" .Ctx "Definition" .Definition) -}}; err != nil { - {{- template "errorHandler" (map "Ctx" .Ctx "Definition" .Definition) }} + grpcfed.RecordErrorToSpan({{ .Ctx }}, err) + return nil, err } {{- end }} diff --git a/generator/testdata/expected_alias.go b/generator/testdata/expected_alias.go index da24bc10..db1761dd 100644 --- a/generator/testdata/expected_alias.go +++ b/generator/testdata/expected_alias.go @@ -258,7 +258,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }); err != nil { return nil, err } - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -392,13 +396,18 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.post.PostService/GetPost", slog.Any("org.post.GetPostRequest", s.logvalue_Org_Post_GetPostRequest(args))) - return s.client.Org_Post_PostServiceClient.GetPost(ctx, args) + ret, err := s.client.Org_Post_PostServiceClient.GetPost(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // This section's codes are generated by the following proto definition. diff --git a/generator/testdata/expected_async.go b/generator/testdata/expected_async.go index b8163527..f35b900e 100644 --- a/generator/testdata/expected_async.go +++ b/generator/testdata/expected_async.go @@ -269,7 +269,11 @@ func (s *FederationService) resolve_Org_Federation_A(ctx context.Context, req *F }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_AAArgument{} - return s.resolve_Org_Federation_AA(ctx, args) + ret, err := s.resolve_Org_Federation_AA(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -298,7 +302,11 @@ func (s *FederationService) resolve_Org_Federation_A(ctx context.Context, req *F }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_ABArgument{} - return s.resolve_Org_Federation_AB(ctx, args) + ret, err := s.resolve_Org_Federation_AB(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -687,7 +695,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_AArgument{} - return s.resolve_Org_Federation_A(ctx, args) + ret, err := s.resolve_Org_Federation_A(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -725,7 +737,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_C(ctx, args) + ret, err := s.resolve_Org_Federation_C(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -753,7 +769,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_BArgument{} - return s.resolve_Org_Federation_B(ctx, args) + ret, err := s.resolve_Org_Federation_B(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -791,7 +811,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_D(ctx, args) + ret, err := s.resolve_Org_Federation_D(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -849,7 +873,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_E(ctx, args) + ret, err := s.resolve_Org_Federation_E(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx2, err) @@ -879,7 +907,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_AArgument{} - return s.resolve_Org_Federation_A(ctx, args) + ret, err := s.resolve_Org_Federation_A(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -917,7 +949,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_C(ctx, args) + ret, err := s.resolve_Org_Federation_C(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -945,7 +981,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_BArgument{} - return s.resolve_Org_Federation_B(ctx, args) + ret, err := s.resolve_Org_Federation_B(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -983,7 +1023,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_D(ctx, args) + ret, err := s.resolve_Org_Federation_D(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx3, err) @@ -1041,7 +1085,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_F(ctx, args) + ret, err := s.resolve_Org_Federation_F(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx2, err) @@ -1069,7 +1117,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_GArgument{} - return s.resolve_Org_Federation_G(ctx, args) + ret, err := s.resolve_Org_Federation_G(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx2, err) @@ -1140,7 +1192,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_H(ctx, args) + ret, err := s.resolve_Org_Federation_H(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -1169,7 +1225,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_IArgument{} - return s.resolve_Org_Federation_I(ctx, args) + ret, err := s.resolve_Org_Federation_I(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -1207,7 +1267,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_J(ctx, args) + ret, err := s.resolve_Org_Federation_J(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) diff --git a/generator/testdata/expected_autobind.go b/generator/testdata/expected_autobind.go index e8e6b07c..3cdb15e2 100644 --- a/generator/testdata/expected_autobind.go +++ b/generator/testdata/expected_autobind.go @@ -227,7 +227,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }); err != nil { return nil, err } - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -307,13 +311,18 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.post.PostService/GetPost", slog.Any("org.post.GetPostRequest", s.logvalue_Org_Post_GetPostRequest(args))) - return s.client.Org_Post_PostServiceClient.GetPost(ctx, args) + ret, err := s.client.Org_Post_PostServiceClient.GetPost(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -374,7 +383,11 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req }); err != nil { return nil, err } - return s.resolve_Org_Federation_User(ctx, args) + ret, err := s.resolve_Org_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) diff --git a/generator/testdata/expected_condition.go b/generator/testdata/expected_condition.go index 8dc97c89..0573b338 100644 --- a/generator/testdata/expected_condition.go +++ b/generator/testdata/expected_condition.go @@ -228,7 +228,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }); err != nil { return nil, err } - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -318,13 +322,18 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.post.PostService/GetPost", slog.Any("org.post.GetPostRequest", s.logvalue_Org_Post_GetPostRequest(args))) - return s.client.Org_Post_PostServiceClient.GetPost(ctx, args) + ret, err := s.client.Org_Post_PostServiceClient.GetPost(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -410,13 +419,18 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.post.PostService/GetPost", slog.Any("org.post.GetPostRequest", s.logvalue_Org_Post_GetPostRequest(args))) - return s.client.Org_Post_PostServiceClient.GetPost(ctx, args) + ret, err := s.client.Org_Post_PostServiceClient.GetPost(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -477,7 +491,11 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req }); err != nil { return nil, err } - return s.resolve_Org_Federation_User(ctx, args) + ret, err := s.resolve_Org_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) diff --git a/generator/testdata/expected_create_post.go b/generator/testdata/expected_create_post.go index a7e2202e..a6b9a409 100644 --- a/generator/testdata/expected_create_post.go +++ b/generator/testdata/expected_create_post.go @@ -364,7 +364,11 @@ func (s *FederationService) resolve_Org_Federation_CreatePostResponse(ctx contex }); err != nil { return nil, err } - return s.resolve_Org_Federation_CreatePost(ctx, args) + ret, err := s.resolve_Org_Federation_CreatePost(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -407,13 +411,18 @@ func (s *FederationService) resolve_Org_Federation_CreatePostResponse(ctx contex return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.post.PostService/CreatePost", slog.Any("org.post.CreatePostRequest", s.logvalue_Org_Post_CreatePostRequest(args))) - return s.client.Org_Post_PostServiceClient.CreatePost(ctx, args) + ret, err := s.client.Org_Post_PostServiceClient.CreatePost(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_CreatePost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_CreatePost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // This section's codes are generated by the following proto definition. diff --git a/generator/testdata/expected_custom_resolver.go b/generator/testdata/expected_custom_resolver.go index e5ea7cbc..398de582 100644 --- a/generator/testdata/expected_custom_resolver.go +++ b/generator/testdata/expected_custom_resolver.go @@ -294,7 +294,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }); err != nil { return nil, err } - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -375,13 +379,18 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.post.PostService/GetPost", slog.Any("org.post.GetPostRequest", s.logvalue_Org_Post_GetPostRequest(args))) - return s.client.Org_Post_PostServiceClient.GetPost(ctx, args) + ret, err := s.client.Org_Post_PostServiceClient.GetPost(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -440,7 +449,11 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req }); err != nil { return nil, err } - return s.resolve_Org_Federation_User(ctx, args) + ret, err := s.resolve_Org_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -524,13 +537,18 @@ func (s *FederationService) resolve_Org_Federation_User(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.user.UserService/GetUser", slog.Any("org.user.GetUserRequest", s.logvalue_Org_User_GetUserRequest(args))) - return s.client.Org_User_UserServiceClient.GetUser(ctx, args) + ret, err := s.client.Org_User_UserServiceClient.GetUser(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_User_UserService_GetUser, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_User_UserService_GetUser, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // This section's codes are generated by the following proto definition. diff --git a/generator/testdata/expected_error_handler.go b/generator/testdata/expected_error_handler.go index 5ede83a4..62f78f74 100644 --- a/generator/testdata/expected_error_handler.go +++ b/generator/testdata/expected_error_handler.go @@ -271,7 +271,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }); err != nil { return nil, err } - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -390,135 +394,90 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.post.PostService/GetPost", slog.Any("org.post.GetPostRequest", s.logvalue_Org_Post_GetPostRequest(args))) - return s.client.Org_Post_PostServiceClient.GetPost(ctx, args) - }, - }); err != nil { - grpcfed.SetGRPCError(ctx, value, err) - type localStatusType struct { - status *grpcfed.Status - logLevel slog.Level - } - stat, handleErr := func() (*localStatusType, error) { - var stat *grpcfed.Status - - // This section's codes are generated by the following proto definition. - /* - def { - name: "id" - by: "$.id" - } - */ - if err := grpcfed.EvalDef(ctx, value, grpcfed.Def[string, *localValueType]{ - Name: `id`, - Type: grpcfed.CELStringType, - Setter: func(value *localValueType, v string) error { - value.vars.id = v - return nil - }, - By: `$.id`, - ByCacheIndex: 6, - }); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, err - } - if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ - Value: value, - Expr: `error.precondition_failures.map(f, f.violations[0]).first(v, v.subject == '').?subject == optional.of('')`, - CacheIndex: 7, - Body: func(value *localValueType) error { - errmsg, err := grpcfed.EvalCEL(ctx, &grpcfed.EvalCELRequest{ - Value: value, - Expr: `'id must be not empty'`, - OutType: reflect.TypeOf(""), - CacheIndex: 8, - }) - if err != nil { - return err - } - errorMessage := errmsg.(string) - var details []grpcfed.ProtoMessage - if _, err := func() (any, error) { - - // This section's codes are generated by the following proto definition. - /* - def { - name: "localized_msg" - message { - name: "LocalizedMessage" - args { name: "value", by: "id" } - } - } - */ - if err := grpcfed.EvalDef(ctx, value, grpcfed.Def[*LocalizedMessage, *localValueType]{ - Name: `localized_msg`, - Type: grpcfed.CELObjectType("org.federation.LocalizedMessage"), - Setter: func(value *localValueType, v *LocalizedMessage) error { - value.vars.localized_msg = v - return nil - }, - Message: func(ctx context.Context, value *localValueType) (any, error) { - args := &FederationService_Org_Federation_LocalizedMessageArgument{} - // { name: "value", by: "id" } - if err := grpcfed.SetCELValue(ctx, &grpcfed.SetCELValueParam[string]{ - Value: value, - Expr: `id`, - CacheIndex: 9, - Setter: func(v string) error { - args.Value = v - return nil - }, - }); err != nil { - return nil, err - } - return s.resolve_Org_Federation_LocalizedMessage(ctx, args) - }, - }); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, err - } - return nil, nil - }(); err != nil { - return err + ret, err := s.client.Org_Post_PostServiceClient.GetPost(ctx, args) + if err != nil { + grpcfed.SetGRPCError(ctx, value, err) + type localStatusType struct { + status *grpcfed.Status + logLevel slog.Level + } + stat, handleErr := func() (*localStatusType, error) { + var stat *grpcfed.Status + + // This section's codes are generated by the following proto definition. + /* + def { + name: "id" + by: "$.id" + } + */ + if err := grpcfed.EvalDef(ctx, value, grpcfed.Def[string, *localValueType]{ + Name: `id`, + Type: grpcfed.CELStringType, + Setter: func(value *localValueType, v string) error { + value.vars.id = v + return nil + }, + By: `$.id`, + ByCacheIndex: 6, + }); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ Value: value, - Expr: `true`, - CacheIndex: 10, + Expr: `error.precondition_failures.map(f, f.violations[0]).first(v, v.subject == '').?subject == optional.of('')`, + CacheIndex: 7, Body: func(value *localValueType) error { + errmsg, err := grpcfed.EvalCEL(ctx, &grpcfed.EvalCELRequest{ + Value: value, + Expr: `'id must be not empty'`, + OutType: reflect.TypeOf(""), + CacheIndex: 8, + }) + if err != nil { + return err + } + errorMessage := errmsg.(string) + var details []grpcfed.ProtoMessage if _, err := func() (any, error) { // This section's codes are generated by the following proto definition. /* def { - name: "_def0_err_detail0_msg0" + name: "localized_msg" message { - name: "CustomMessage" - args { name: "msg", by: "id" } + name: "LocalizedMessage" + args { name: "value", by: "id" } } } */ - if err := grpcfed.EvalDef(ctx, value, grpcfed.Def[*CustomMessage, *localValueType]{ - Name: `_def0_err_detail0_msg0`, - Type: grpcfed.CELObjectType("org.federation.CustomMessage"), - Setter: func(value *localValueType, v *CustomMessage) error { - value.vars._def0_err_detail0_msg0 = v + if err := grpcfed.EvalDef(ctx, value, grpcfed.Def[*LocalizedMessage, *localValueType]{ + Name: `localized_msg`, + Type: grpcfed.CELObjectType("org.federation.LocalizedMessage"), + Setter: func(value *localValueType, v *LocalizedMessage) error { + value.vars.localized_msg = v return nil }, Message: func(ctx context.Context, value *localValueType) (any, error) { - args := &FederationService_Org_Federation_CustomMessageArgument{} - // { name: "msg", by: "id" } + args := &FederationService_Org_Federation_LocalizedMessageArgument{} + // { name: "value", by: "id" } if err := grpcfed.SetCELValue(ctx, &grpcfed.SetCELValueParam[string]{ Value: value, Expr: `id`, - CacheIndex: 11, + CacheIndex: 9, Setter: func(v string) error { - args.Msg = v + args.Value = v return nil }, }); err != nil { return nil, err } - return s.resolve_Org_Federation_CustomMessage(ctx, args) + ret, err := s.resolve_Org_Federation_LocalizedMessage(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -528,144 +487,202 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req }(); err != nil { return err } - if detail := grpcfed.CustomMessage(ctx, &grpcfed.CustomMessageParam{ - Value: value, - MessageValueName: "_def0_err_detail0_msg0", - CacheIndex: 12, - MessageIndex: 0, - }); detail != nil { - details = append(details, detail) - } - { - detail, err := grpcfed.EvalCEL(ctx, &grpcfed.EvalCELRequest{ - Value: value, - Expr: `org.post.Post{id: 'foo'}`, - OutType: reflect.TypeOf((*post.Post)(nil)), - CacheIndex: 13, - }) - if err != nil { - grpcfed.Logger(ctx).ErrorContext(ctx, "failed setting error details", slog.String("error", err.Error())) - } - if detail != nil { - details = append(details, detail.(grpcfed.ProtoMessage)) - } + if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ + Value: value, + Expr: `true`, + CacheIndex: 10, + Body: func(value *localValueType) error { + if _, err := func() (any, error) { + + // This section's codes are generated by the following proto definition. + /* + def { + name: "_def0_err_detail0_msg0" + message { + name: "CustomMessage" + args { name: "msg", by: "id" } + } + } + */ + if err := grpcfed.EvalDef(ctx, value, grpcfed.Def[*CustomMessage, *localValueType]{ + Name: `_def0_err_detail0_msg0`, + Type: grpcfed.CELObjectType("org.federation.CustomMessage"), + Setter: func(value *localValueType, v *CustomMessage) error { + value.vars._def0_err_detail0_msg0 = v + return nil + }, + Message: func(ctx context.Context, value *localValueType) (any, error) { + args := &FederationService_Org_Federation_CustomMessageArgument{} + // { name: "msg", by: "id" } + if err := grpcfed.SetCELValue(ctx, &grpcfed.SetCELValueParam[string]{ + Value: value, + Expr: `id`, + CacheIndex: 11, + Setter: func(v string) error { + args.Msg = v + return nil + }, + }); err != nil { + return nil, err + } + ret, err := s.resolve_Org_Federation_CustomMessage(ctx, args) + if err != nil { + return nil, err + } + return ret, nil + }, + }); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err + } + return nil, nil + }(); err != nil { + return err + } + if detail := grpcfed.CustomMessage(ctx, &grpcfed.CustomMessageParam{ + Value: value, + MessageValueName: "_def0_err_detail0_msg0", + CacheIndex: 12, + MessageIndex: 0, + }); detail != nil { + details = append(details, detail) + } + { + detail, err := grpcfed.EvalCEL(ctx, &grpcfed.EvalCELRequest{ + Value: value, + Expr: `org.post.Post{id: 'foo'}`, + OutType: reflect.TypeOf((*post.Post)(nil)), + CacheIndex: 13, + }) + if err != nil { + grpcfed.Logger(ctx).ErrorContext(ctx, "failed setting error details", slog.String("error", err.Error())) + } + if detail != nil { + details = append(details, detail.(grpcfed.ProtoMessage)) + } + } + { + detail, err := grpcfed.EvalCEL(ctx, &grpcfed.EvalCELRequest{ + Value: value, + Expr: `org.post.CreatePost{title: 'bar'}`, + OutType: reflect.TypeOf((*post.CreatePost)(nil)), + CacheIndex: 14, + }) + if err != nil { + grpcfed.Logger(ctx).ErrorContext(ctx, "failed setting error details", slog.String("error", err.Error())) + } + if detail != nil { + details = append(details, detail.(grpcfed.ProtoMessage)) + } + } + if detail := grpcfed.PreconditionFailure(ctx, value, []*grpcfed.PreconditionFailureViolation{ + { + Type: `'some-type'`, + Subject: `'some-subject'`, + Desc: `'some-description'`, + TypeCacheIndex: 15, + SubjectCacheIndex: 16, + DescCacheIndex: 17, + }, + }); detail != nil { + details = append(details, detail) + } + if detail := grpcfed.LocalizedMessage(ctx, &grpcfed.LocalizedMessageParam{ + Value: value, + Locale: "en-US", + Message: `localized_msg.value`, + CacheIndex: 18, + }); detail != nil { + details = append(details, detail) + } + return nil + }, + }); err != nil { + return err } - { - detail, err := grpcfed.EvalCEL(ctx, &grpcfed.EvalCELRequest{ - Value: value, - Expr: `org.post.CreatePost{title: 'bar'}`, - OutType: reflect.TypeOf((*post.CreatePost)(nil)), - CacheIndex: 14, - }) - if err != nil { - grpcfed.Logger(ctx).ErrorContext(ctx, "failed setting error details", slog.String("error", err.Error())) - } - if detail != nil { - details = append(details, detail.(grpcfed.ProtoMessage)) - } + status := grpcfed.NewGRPCStatus(grpcfed.FailedPreconditionCode, errorMessage) + statusWithDetails, err := status.WithDetails(details...) + if err != nil { + grpcfed.Logger(ctx).ErrorContext(ctx, "failed setting error details", slog.String("error", err.Error())) + stat = status + } else { + stat = statusWithDetails } - if detail := grpcfed.PreconditionFailure(ctx, value, []*grpcfed.PreconditionFailureViolation{ - { - Type: `'some-type'`, - Subject: `'some-subject'`, - Desc: `'some-description'`, - TypeCacheIndex: 15, - SubjectCacheIndex: 16, - DescCacheIndex: 17, + return nil + }, + }); err != nil { + return nil, err + } + if stat != nil { + return &localStatusType{status: stat, logLevel: slog.LevelError}, nil + } + if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ + Value: value, + Expr: `error.code == google.rpc.Code.UNIMPLEMENTED`, + CacheIndex: 19, + Body: func(value *localValueType) error { + stat = grpcfed.NewGRPCStatus(grpcfed.OKCode, "ignore error") + if err := grpcfed.IgnoreAndResponse(ctx, value, grpcfed.Def[*post.GetPostResponse, *localValueType]{ + Name: "res", + Type: grpcfed.CELObjectType("org.post.GetPostResponse"), + Setter: func(value *localValueType, v *post.GetPostResponse) error { + ret = v // assign customized response to the result value. + return nil }, - }); detail != nil { - details = append(details, detail) - } - if detail := grpcfed.LocalizedMessage(ctx, &grpcfed.LocalizedMessageParam{ - Value: value, - Locale: "en-US", - Message: `localized_msg.value`, - CacheIndex: 18, - }); detail != nil { - details = append(details, detail) + By: `org.post.GetPostResponse{post: org.post.Post{id: 'anonymous', title: 'none'}}`, + ByCacheIndex: 20, + }); err != nil { + grpcfed.Logger(ctx).ErrorContext(ctx, "failed to set response when ignored", slog.String("error", err.Error())) + return nil } return nil }, }); err != nil { - return err + return nil, err } - status := grpcfed.NewGRPCStatus(grpcfed.FailedPreconditionCode, errorMessage) - statusWithDetails, err := status.WithDetails(details...) - if err != nil { - grpcfed.Logger(ctx).ErrorContext(ctx, "failed setting error details", slog.String("error", err.Error())) - stat = status - } else { - stat = statusWithDetails + if stat != nil { + return &localStatusType{status: stat, logLevel: slog.LevelError}, nil } - return nil - }, - }); err != nil { - return nil, err - } - if stat != nil { - return &localStatusType{status: stat, logLevel: slog.LevelError}, nil - } - if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ - Value: value, - Expr: `error.code == google.rpc.Code.UNIMPLEMENTED`, - CacheIndex: 19, - Body: func(value *localValueType) error { - stat = grpcfed.NewGRPCStatus(grpcfed.OKCode, "ignore error") - if err := grpcfed.IgnoreAndResponse(ctx, value, grpcfed.Def[*post.GetPostResponse, *localValueType]{ - Name: "res", - Type: grpcfed.CELObjectType("org.post.GetPostResponse"), - Setter: func(value *localValueType, v *post.GetPostResponse) error { - value.vars.res = v + if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ + Value: value, + Expr: `true`, + CacheIndex: 21, + Body: func(value *localValueType) error { + stat = grpcfed.NewGRPCStatus(grpcfed.OKCode, "ignore error") return nil }, - By: `org.post.GetPostResponse{post: org.post.Post{id: 'anonymous', title: 'none'}}`, - ByCacheIndex: 20, }); err != nil { - grpcfed.Logger(ctx).ErrorContext(ctx, "failed to set response when ignored", slog.String("error", err.Error())) - return nil + return nil, err } - return nil - }, - }); err != nil { - return nil, err - } - if stat != nil { - return &localStatusType{status: stat, logLevel: slog.LevelError}, nil - } - if err := grpcfed.If(ctx, &grpcfed.IfParam[*localValueType]{ - Value: value, - Expr: `true`, - CacheIndex: 21, - Body: func(value *localValueType) error { - stat = grpcfed.NewGRPCStatus(grpcfed.OKCode, "ignore error") - return nil - }, - }); err != nil { - return nil, err - } - if stat != nil { - return &localStatusType{status: stat, logLevel: slog.LevelError}, nil - } - return nil, nil - }() - if handleErr != nil { - grpcfed.Logger(ctx).ErrorContext(ctx, "failed to handle error", slog.String("error", handleErr.Error())) - // If it fails during error handling, return the original error. - if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } - } else if stat != nil { - if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, stat.status.Err()); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, stat.logLevel, grpcfed.LogAttrs(ctx)) - } - } else { - if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + if stat != nil { + return &localStatusType{status: stat, logLevel: slog.LevelError}, nil + } + return nil, nil + }() + if handleErr != nil { + grpcfed.Logger(ctx).ErrorContext(ctx, "failed to handle error", slog.String("error", handleErr.Error())) + // If it fails during error handling, return the original error. + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } else if stat != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, stat.status.Err()); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, stat.logLevel, grpcfed.LogAttrs(ctx)) + } + } else { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } } - } + return ret, nil + }, + }); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // This section's codes are generated by the following proto definition. diff --git a/generator/testdata/expected_map.go b/generator/testdata/expected_map.go index 94a59ec3..2db7f2a2 100644 --- a/generator/testdata/expected_map.go +++ b/generator/testdata/expected_map.go @@ -269,7 +269,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostsResponse(ctx context. }); err != nil { return nil, err } - return s.resolve_Org_Federation_Posts(ctx, args) + ret, err := s.resolve_Org_Federation_Posts(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -367,13 +371,18 @@ func (s *FederationService) resolve_Org_Federation_Posts(ctx context.Context, re return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.post.PostService/GetPosts", slog.Any("org.post.GetPostsRequest", s.logvalue_Org_Post_GetPostsRequest(args))) - return s.client.Org_Post_PostServiceClient.GetPosts(ctx, args) + ret, err := s.client.Org_Post_PostServiceClient.GetPosts(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPosts, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Org_Post_PostService_GetPosts, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -469,13 +478,18 @@ func (s *FederationService) resolve_Org_Federation_Posts(ctx context.Context, re return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.post.PostService/GetPosts", slog.Any("org.post.GetPostsRequest", s.logvalue_Org_Post_GetPostsRequest(args))) - return s.client.Org_Post_PostServiceClient.GetPosts(ctx, args) + ret, err := s.client.Org_Post_PostServiceClient.GetPosts(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPosts, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Org_Post_PostService_GetPosts, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -582,13 +596,18 @@ func (s *FederationService) resolve_Org_Federation_Posts(ctx context.Context, re return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.post.PostService/GetPosts", slog.Any("org.post.GetPostsRequest", s.logvalue_Org_Post_GetPostsRequest(args))) - return s.client.Org_Post_PostServiceClient.GetPosts(ctx, args) + ret, err := s.client.Org_Post_PostServiceClient.GetPosts(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPosts, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Org_Post_PostService_GetPosts, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -830,13 +849,18 @@ func (s *FederationService) resolve_Org_Federation_User(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.user.UserService/GetUser", slog.Any("org.user.GetUserRequest", s.logvalue_Org_User_GetUserRequest(args))) - return s.client.Org_User_UserServiceClient.GetUser(ctx, args) + ret, err := s.client.Org_User_UserServiceClient.GetUser(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_User_UserService_GetUser, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_User_UserService_GetUser, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // This section's codes are generated by the following proto definition. diff --git a/generator/testdata/expected_multi_user.go b/generator/testdata/expected_multi_user.go index 0e99aa17..e403e010 100644 --- a/generator/testdata/expected_multi_user.go +++ b/generator/testdata/expected_multi_user.go @@ -256,7 +256,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_UserIDArgument{} - return s.resolve_Org_Federation_UserID(ctx, args) + ret, err := s.resolve_Org_Federation_UserID(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -294,7 +298,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_User(ctx, args) + ret, err := s.resolve_Org_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -323,7 +331,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_UserIDArgument{} - return s.resolve_Org_Federation_UserID(ctx, args) + ret, err := s.resolve_Org_Federation_UserID(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -361,7 +373,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_User(ctx, args) + ret, err := s.resolve_Org_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -479,7 +495,11 @@ func (s *FederationService) resolve_Org_Federation_User(ctx context.Context, req }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_SubArgument{} - return s.resolve_Org_Federation_Sub(ctx, args) + ret, err := s.resolve_Org_Federation_Sub(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -522,13 +542,18 @@ func (s *FederationService) resolve_Org_Federation_User(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.user.UserService/GetUser", slog.Any("org.user.GetUserRequest", s.logvalue_Org_User_GetUserRequest(args))) - return s.client.Org_User_UserServiceClient.GetUser(ctx, args) + ret, err := s.client.Org_User_UserServiceClient.GetUser(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_User_UserService_GetUser, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Org_User_UserService_GetUser, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -619,7 +644,11 @@ func (s *FederationService) resolve_Org_Federation_UserID(ctx context.Context, r }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_SubArgument{} - return s.resolve_Org_Federation_Sub(ctx, args) + ret, err := s.resolve_Org_Federation_Sub(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) diff --git a/generator/testdata/expected_oneof.go b/generator/testdata/expected_oneof.go index 97e1f4fe..7b894d47 100644 --- a/generator/testdata/expected_oneof.go +++ b/generator/testdata/expected_oneof.go @@ -236,7 +236,11 @@ func (s *FederationService) resolve_Org_Federation_GetResponse(ctx context.Conte }); err != nil { return nil, err } - return s.resolve_Org_Federation_UserSelection(ctx, args) + ret, err := s.resolve_Org_Federation_UserSelection(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -397,13 +401,18 @@ func (s *FederationService) resolve_Org_Federation_User(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.user.UserService/GetUser", slog.Any("org.user.GetUserRequest", s.logvalue_Org_User_GetUserRequest(args))) - return s.client.Org_User_UserServiceClient.GetUser(ctx, args) + ret, err := s.client.Org_User_UserServiceClient.GetUser(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_User_UserService_GetUser, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_User_UserService_GetUser, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // create a message value to be returned. @@ -464,7 +473,11 @@ func (s *FederationService) resolve_Org_Federation_UserSelection(ctx context.Con }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_MArgument{} - return s.resolve_Org_Federation_M(ctx, args) + ret, err := s.resolve_Org_Federation_M(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -535,7 +548,11 @@ func (s *FederationService) resolve_Org_Federation_UserSelection(ctx context.Con }); err != nil { return nil, err } - return s.resolve_Org_Federation_User(ctx, args) + ret, err := s.resolve_Org_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -586,7 +603,11 @@ func (s *FederationService) resolve_Org_Federation_UserSelection(ctx context.Con }); err != nil { return nil, err } - return s.resolve_Org_Federation_User(ctx, args) + ret, err := s.resolve_Org_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -637,7 +658,11 @@ func (s *FederationService) resolve_Org_Federation_UserSelection(ctx context.Con }); err != nil { return nil, err } - return s.resolve_Org_Federation_User(ctx, args) + ret, err := s.resolve_Org_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) diff --git a/generator/testdata/expected_resolver_overlaps.go b/generator/testdata/expected_resolver_overlaps.go index fe9b95ef..1c74a28e 100644 --- a/generator/testdata/expected_resolver_overlaps.go +++ b/generator/testdata/expected_resolver_overlaps.go @@ -249,7 +249,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse1(ctx context. }); err != nil { return nil, err } - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -327,7 +331,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse2(ctx context. }); err != nil { return nil, err } - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx, err) @@ -406,13 +414,18 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.post.PostService/GetPost", slog.Any("org.post.GetPostRequest", s.logvalue_Org_Post_GetPostRequest(args))) - return s.client.Org_Post_PostServiceClient.GetPost(ctx, args) + ret, err := s.client.Org_Post_PostServiceClient.GetPost(ctx, args) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) - } + grpcfed.RecordErrorToSpan(ctx, err) + return nil, err } // assign named parameters to message arguments to pass to the custom resolver. diff --git a/generator/testdata/expected_simple_aggregation.go b/generator/testdata/expected_simple_aggregation.go index 554ff637..46aae454 100644 --- a/generator/testdata/expected_simple_aggregation.go +++ b/generator/testdata/expected_simple_aggregation.go @@ -339,7 +339,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }); err != nil { return nil, err } - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -611,7 +615,11 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req }); err != nil { return nil, err } - return s.resolve_Org_Federation_M(ctx, args) + ret, err := s.resolve_Org_Federation_M(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -654,7 +662,7 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.post.PostService/GetPost", slog.Any("org.post.GetPostRequest", s.logvalue_Org_Post_GetPostRequest(args))) - return grpcfed.WithTimeout[post.GetPostResponse](ctx, "org.post.PostService/GetPost", 10000000000 /* 10s */, func(ctx context.Context) (*post.GetPostResponse, error) { + ret, err := grpcfed.WithTimeout[post.GetPostResponse](ctx, "org.post.PostService/GetPost", 10000000000 /* 10s */, func(ctx context.Context) (*post.GetPostResponse, error) { b := grpcfed.NewConstantBackOff(2000000000) /* 2s */ b = grpcfed.BackOffWithMaxRetries(b, 3) b = grpcfed.BackOffWithContext(b, ctx) @@ -668,12 +676,17 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req }, }) }) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Org_Post_PostService_GetPost, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. @@ -732,7 +745,11 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req }); err != nil { return nil, err } - return s.resolve_Org_Federation_User(ctx, args) + ret, err := s.resolve_Org_Federation_User(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -761,7 +778,11 @@ func (s *FederationService) resolve_Org_Federation_Post(ctx context.Context, req }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_ZArgument{} - return s.resolve_Org_Federation_Z(ctx, args) + ret, err := s.resolve_Org_Federation_Z(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -879,7 +900,11 @@ func (s *FederationService) resolve_Org_Federation_User(ctx context.Context, req }); err != nil { return nil, err } - return s.resolve_Org_Federation_M(ctx, args) + ret, err := s.resolve_Org_Federation_M(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -922,7 +947,7 @@ func (s *FederationService) resolve_Org_Federation_User(ctx context.Context, req return nil, err } grpcfed.Logger(ctx).DebugContext(ctx, "call org.user.UserService/GetUser", slog.Any("org.user.GetUserRequest", s.logvalue_Org_User_GetUserRequest(args))) - return grpcfed.WithTimeout[user.GetUserResponse](ctx, "org.user.UserService/GetUser", 20000000000 /* 20s */, func(ctx context.Context) (*user.GetUserResponse, error) { + ret, err := grpcfed.WithTimeout[user.GetUserResponse](ctx, "org.user.UserService/GetUser", 20000000000 /* 20s */, func(ctx context.Context) (*user.GetUserResponse, error) { b := grpcfed.NewExponentialBackOff(&grpcfed.ExponentialBackOffConfig{ InitialInterval: 1000000000, /* 1s */ RandomizationFactor: 0.7, @@ -942,12 +967,17 @@ func (s *FederationService) resolve_Org_Federation_User(ctx context.Context, req }, }) }) + if err != nil { + if err := s.errorHandler(ctx, FederationService_DependentMethod_Org_User_UserService_GetUser, err); err != nil { + grpcfed.RecordErrorToSpan(ctx, err) + return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx)) + } + } + return ret, nil }, }); err != nil { - if err := s.errorHandler(ctx1, FederationService_DependentMethod_Org_User_UserService_GetUser, err); err != nil { - grpcfed.RecordErrorToSpan(ctx1, err) - return nil, grpcfed.NewErrorWithLogAttrs(err, slog.LevelError, grpcfed.LogAttrs(ctx1)) - } + grpcfed.RecordErrorToSpan(ctx1, err) + return nil, err } // This section's codes are generated by the following proto definition. diff --git a/generator/testdata/expected_validation.go b/generator/testdata/expected_validation.go index f56d2531..f9195994 100644 --- a/generator/testdata/expected_validation.go +++ b/generator/testdata/expected_validation.go @@ -227,7 +227,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_PostArgument{} - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -305,7 +309,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }, Message: func(ctx context.Context, value *localValueType) (any, error) { args := &FederationService_Org_Federation_PostArgument{} - return s.resolve_Org_Federation_Post(ctx, args) + ret, err := s.resolve_Org_Federation_Post(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -411,7 +419,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }); err != nil { return nil, err } - return s.resolve_Org_Federation_CustomMessage(ctx, args) + ret, err := s.resolve_Org_Federation_CustomMessage(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) @@ -453,7 +465,11 @@ func (s *FederationService) resolve_Org_Federation_GetPostResponse(ctx context.C }); err != nil { return nil, err } - return s.resolve_Org_Federation_CustomMessage(ctx, args) + ret, err := s.resolve_Org_Federation_CustomMessage(ctx, args) + if err != nil { + return nil, err + } + return ret, nil }, }); err != nil { grpcfed.RecordErrorToSpan(ctx1, err) diff --git a/resolver/context.go b/resolver/context.go index 92d3faa4..ca961837 100644 --- a/resolver/context.go +++ b/resolver/context.go @@ -1,16 +1,15 @@ package resolver type context struct { - errorBuilder *errorBuilder - allWarnings *allWarnings - fileRef *File - msg *Message - enum *Enum - plugin *CELPlugin - defIdx int - errDetailIdx int - ignoreNameValidation bool - variableMap map[string]*VariableDefinition + errorBuilder *errorBuilder + allWarnings *allWarnings + fileRef *File + msg *Message + enum *Enum + plugin *CELPlugin + defIdx int + errDetailIdx int + variableMap map[string]*VariableDefinition } type allWarnings struct { @@ -27,14 +26,13 @@ func newContext() *context { func (c *context) clone() *context { return &context{ - errorBuilder: c.errorBuilder, - allWarnings: c.allWarnings, - fileRef: c.fileRef, - msg: c.msg, - enum: c.enum, - plugin: c.plugin, - defIdx: c.defIdx, - ignoreNameValidation: c.ignoreNameValidation, + errorBuilder: c.errorBuilder, + allWarnings: c.allWarnings, + fileRef: c.fileRef, + msg: c.msg, + enum: c.enum, + plugin: c.plugin, + defIdx: c.defIdx, errDetailIdx: c.errDetailIdx, variableMap: c.variableMap, @@ -77,12 +75,6 @@ func (c *context) withErrDetailIndex(idx int) *context { return ctx } -func (c *context) withIgnoreNameValidation() *context { - ctx := c.clone() - ctx.ignoreNameValidation = true - return ctx -} - func (c *context) clearVariableDefinitions() { c.variableMap = make(map[string]*VariableDefinition) } diff --git a/resolver/resolver.go b/resolver/resolver.go index 843711b0..79394b7c 100644 --- a/resolver/resolver.go +++ b/resolver/resolver.go @@ -1796,6 +1796,22 @@ func (r *Resolver) resolveMessageRule(ctx *context, msg *Message, ruleDef *feder if ruleDef == nil { return } + for idx, def := range ruleDef.GetDef() { + name := def.GetName() + if name == "" { + n := fmt.Sprintf("_def%d", idx) + def.Name = &n + } else { + if err := r.validateName(name); err != nil { + empty := "" + def.Name = &empty + ctx.addError(ErrWithLocation( + err.Error(), + builder.WithDef(idx).WithName().Location(), + )) + } + } + } msg.Rule = &MessageRule{ DefSet: &VariableDefinitionSet{ Defs: r.resolveVariableDefinitions(ctx, ruleDef.GetDef(), func(idx int) *source.VariableDefinitionOptionBuilder { @@ -1857,7 +1873,7 @@ func (r *Resolver) resolveVariableDefinition(ctx *context, varDef *federation.Va } return &VariableDefinition{ Idx: ctx.defIndex(), - Name: r.resolveVariableName(ctx, varDef.GetName(), builder), + Name: varDef.GetName(), If: ifValue, AutoBind: varDef.GetAutobind(), Expr: r.resolveVariableExpr(ctx, varDef, builder), @@ -1865,22 +1881,6 @@ func (r *Resolver) resolveVariableDefinition(ctx *context, varDef *federation.Va } } -func (r *Resolver) resolveVariableName(ctx *context, name string, builder *source.VariableDefinitionOptionBuilder) string { - if !ctx.ignoreNameValidation { - if err := r.validateName(name); err != nil { - ctx.addError(ErrWithLocation( - err.Error(), - builder.WithName().Location(), - )) - return "" - } - } - if name != "" { - return name - } - return fmt.Sprintf("_def%d", ctx.defIndex()) -} - func (r *Resolver) resolveVariableExpr(ctx *context, varDef *federation.VariableDefinition, builder *source.VariableDefinitionOptionBuilder) *VariableExpr { switch varDef.GetExpr().(type) { case *federation.VariableDefinition_By: @@ -2092,14 +2092,24 @@ func (r *Resolver) resolveGRPCError(ctx *context, def *federation.GRPCError, bui ignoreAndResponse = &CELValue{Expr: res} } for idx, errDef := range def.GetDef() { - if errDef.GetName() == "" { - name := fmt.Sprintf("_def%d_def%d", ctx.defIndex(), idx) - errDef.Name = &name + name := errDef.GetName() + if name == "" { + n := fmt.Sprintf("_def%d_def%d", ctx.defIndex(), idx) + errDef.Name = &n + } else { + if err := r.validateName(name); err != nil { + empty := "" + errDef.Name = &empty + ctx.addError(ErrWithLocation( + err.Error(), + builder.WithDef(idx).WithName().Location(), + )) + } } } return &GRPCError{ DefSet: &VariableDefinitionSet{ - Defs: r.resolveVariableDefinitions(ctx.withIgnoreNameValidation(), def.GetDef(), func(idx int) *source.VariableDefinitionOptionBuilder { + Defs: r.resolveVariableDefinitions(ctx, def.GetDef(), func(idx int) *source.VariableDefinitionOptionBuilder { return builder.WithDef(idx) }), }, @@ -2145,15 +2155,25 @@ func (r *Resolver) resolveGRPCErrorDetails(ctx *context, details []*federation.G byValues = append(byValues, &CELValue{Expr: by}) } for idx, errDetailDef := range detail.GetDef() { - if errDetailDef.GetName() == "" { - name := fmt.Sprintf("_def%d_err_detail%d_def%d", ctx.defIndex(), ctx.errDetailIndex(), idx) - errDetailDef.Name = &name + name := errDetailDef.GetName() + if name == "" { + n := fmt.Sprintf("_def%d_err_detail%d_def%d", ctx.defIndex(), ctx.errDetailIndex(), idx) + errDetailDef.Name = &n + } else { + if err := r.validateName(name); err != nil { + empty := "" + errDetailDef.Name = &empty + ctx.addError(ErrWithLocation( + err.Error(), + builder.WithDef(idx).WithName().Location(), + )) + } } } result = append(result, &GRPCErrorDetail{ If: r.resolveGRPCErrorIf(detail.GetIf()), DefSet: &VariableDefinitionSet{ - Defs: r.resolveVariableDefinitions(ctx.withIgnoreNameValidation(), detail.GetDef(), func(idx int) *source.VariableDefinitionOptionBuilder { + Defs: r.resolveVariableDefinitions(ctx, detail.GetDef(), func(idx int) *source.VariableDefinitionOptionBuilder { return builder.WithDef(idx) }), }, @@ -2185,7 +2205,6 @@ func (r *Resolver) resolveGRPCDetailMessages(ctx *context, messages []*federatio }, }) } - ctx = ctx.withIgnoreNameValidation() defs := make([]*VariableDefinition, 0, len(msgs)) for _, def := range r.resolveVariableDefinitions(ctx, msgs, builderFn) { def.Used = true @@ -2361,12 +2380,29 @@ func (r *Resolver) resolveFieldOneofRule(ctx *context, field *Field, def *federa if b := def.GetBy(); b != "" { by = &CELValue{Expr: b} } + oneofBuilder := builder.WithOption().WithOneOf() + for idx, oneofDef := range def.GetDef() { + name := oneofDef.GetName() + if name == "" { + n := fmt.Sprintf("_oneof_def%d", idx) + oneofDef.Name = &n + } else { + if err := r.validateName(name); err != nil { + empty := "" + oneofDef.Name = &empty + ctx.addError(ErrWithLocation( + err.Error(), + oneofBuilder.WithDef(idx).WithName().Location(), + )) + } + } + } return &FieldOneofRule{ If: ifValue, Default: def.GetDefault(), DefSet: &VariableDefinitionSet{ Defs: r.resolveVariableDefinitions(ctx, def.GetDef(), func(idx int) *source.VariableDefinitionOptionBuilder { - return builder.WithOption().WithOneOf().WithDef(idx) + return oneofBuilder.WithDef(idx) }), }, By: by, diff --git a/validator/testdata/invalid_variable_name.proto b/validator/testdata/invalid_variable_name.proto new file mode 100644 index 00000000..5d156753 --- /dev/null +++ b/validator/testdata/invalid_variable_name.proto @@ -0,0 +1,51 @@ +syntax = "proto3"; + +package org.federation; + +import "federation.proto"; +import "echo.proto"; + +option go_package = "example/federation;federation"; + +service FederationService { + option (grpc.federation.service) = {}; + rpc Get(GetRequest) returns (GetResponse) {}; +} + +message GetRequest {} + +message GetResponse { + option (grpc.federation.message) = { + def [ + { name: "_def0" by: "0" }, + { + validation { + error { + def { name: "_def1" by: "1" } + details { + def { name: "_def2" by: "2" } + } + } + } + }, + { + call { + method: "echo.EchoService/Echo" + error { + def { name: "_def3" by: "3" } + details { + def { name: "_def4" by: "4" } + } + } + } + } + ] + }; + oneof o { + string foo = 1 [(grpc.federation.field).oneof = { + default: true + def { name: "_def5" by: "5" } + by: "'foo'" + }]; + } +} \ No newline at end of file diff --git a/validator/validator_test.go b/validator/validator_test.go index 1a2e0b2e..e0fc4b93 100644 --- a/validator/validator_test.go +++ b/validator/validator_test.go @@ -570,6 +570,26 @@ testdata/nested_message_cyclic_dependency.proto:50:5: found cyclic dependency in testdata/nested_message_cyclic_dependency.proto:55:19: recursive definition: "C" is own message name 55: name: "A.B.C" ^ +`}, + {file: "invalid_variable_name.proto", expected: ` +testdata/invalid_variable_name.proto:20:15: "_def0" is invalid name. name should be in the following pattern: ^[a-zA-Z][a-zA-Z0-9_]*$ +20: { name: "_def0" by: "0" }, + ^ +testdata/invalid_variable_name.proto:24:25: "_def1" is invalid name. name should be in the following pattern: ^[a-zA-Z][a-zA-Z0-9_]*$ +24: def { name: "_def1" by: "1" } + ^ +testdata/invalid_variable_name.proto:26:27: "_def2" is invalid name. name should be in the following pattern: ^[a-zA-Z][a-zA-Z0-9_]*$ +26: def { name: "_def2" by: "2" } + ^ +testdata/invalid_variable_name.proto:35:25: "_def3" is invalid name. name should be in the following pattern: ^[a-zA-Z][a-zA-Z0-9_]*$ +35: def { name: "_def3" by: "3" } + ^ +testdata/invalid_variable_name.proto:37:27: "_def4" is invalid name. name should be in the following pattern: ^[a-zA-Z][a-zA-Z0-9_]*$ +37: def { name: "_def4" by: "4" } + ^ +testdata/invalid_variable_name.proto:47:19: "_def5" is invalid name. name should be in the following pattern: ^[a-zA-Z][a-zA-Z0-9_]*$ +47: def { name: "_def5" by: "5" } + ^ `}, {file: "invalid_wrapper_type_conversion.proto", expected: ` testdata/invalid_wrapper_type_conversion.proto:20:3: cannot convert message to "double"