package handler import ( "context" "git.ikuban.com/server/kratos-utils/v2/transport/http/reply" "git.ikuban.com/server/kratos-utils/v2/transport/middleware" "github.com/go-kratos/kratos/v2/transport/http" "google.golang.org/grpc" ) func unaryHandler(srv any, method grpc.MethodDesc, option *middleware.Option) http.HandlerFunc { return func(ctx http.Context) error { http.SetOperation(ctx, option.Path) dec := func(in any) error { if err := ctx.Bind(&in); err != nil { return err } if err := ctx.BindQuery(&in); err != nil { return err } // Bind URL path variables if err := ctx.BindVars(&in); err != nil { return err } return nil } httpCtx := ctx interceptor := func(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp any, err error) { ctx = middleware.NewOptionContext(ctx, option) h := httpCtx.Middleware(func(ctx context.Context, req interface{}) (interface{}, error) { return handler(ctx, req) }) return h(ctx, req) } out, err := method.Handler(srv, ctx, dec, interceptor) if err != nil { return err } return ctx.Result(200, reply.WrapReply(out)) } }