| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- package handler
- import (
- "context"
- "git.ikuban.com/server/kratos-utils/v2/http/middleware"
- "git.ikuban.com/server/kratos-utils/v2/http/reply"
- "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
- }
- 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
- }
- success := &reply.SuccessReply{
- Code: 0,
- }
- if out != nil {
- success.Data = out
- }
- return ctx.Result(200, success)
- }
- }
|