// Code generated by protoc-gen-go-micro. DO NOT EDIT.
// protoc-gen-go-micro version: v3.10.4
// source: proto.proto

package pb

import (
	context "context"
	v31 "go.unistack.org/micro-client-http/v4"
	v3 "go.unistack.org/micro-server-http/v4"
	proto "go.unistack.org/micro-tests/server/combo/proto"
	client "go.unistack.org/micro/v4/client"
	server "go.unistack.org/micro/v4/server"
	http "net/http"
)

var (
	TestServerEndpoints = []v3.EndpointMetadata{
		{
			Name:   "Test.Call",
			Path:   "/Call",
			Method: "POST",
			Body:   "*",
			Stream: false,
		},
	}
)

type testClient struct {
	c    client.Client
	name string
}

func NewTestClient(name string, c client.Client) proto.TestClient {
	return &testClient{c: c, name: name}
}

func (c *testClient) Call(ctx context.Context, req *proto.CallReq, opts ...client.CallOption) (*proto.CallRsp, error) {
	errmap := make(map[string]interface{}, 1)
	errmap["default"] = &proto.ErrorRsp{}
	opts = append(opts,
		v31.ErrorMap(errmap),
	)
	opts = append(opts,
		v31.Method(http.MethodPost),
		v31.Path("/Call"),
		v31.Body("*"),
	)
	rsp := &proto.CallRsp{}
	err := c.c.Call(ctx, c.c.NewRequest(c.name, "Test.Call", req), rsp, opts...)
	if err != nil {
		return nil, err
	}
	return rsp, nil
}

type testServer struct {
	proto.TestServer
}

func (h *testServer) Call(ctx context.Context, req *proto.CallReq, rsp *proto.CallRsp) error {
	return h.TestServer.Call(ctx, req, rsp)
}

func RegisterTestServer(s server.Server, sh proto.TestServer, opts ...server.HandlerOption) error {
	type test interface {
		Call(ctx context.Context, req *proto.CallReq, rsp *proto.CallRsp) error
	}
	type Test struct {
		test
	}
	h := &testServer{sh}
	opts = append(opts, v3.HandlerEndpoints(TestServerEndpoints))
	return s.Handle(s.NewHandler(&Test{h}, opts...))
}
