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

package pb

import (
	context "context"
	v3 "go.unistack.org/micro-client-http/v3"
	v31 "go.unistack.org/micro-server-http/v3"
	api "go.unistack.org/micro/v3/api"
	client "go.unistack.org/micro/v3/client"
	server "go.unistack.org/micro/v3/server"
	http "net/http"
	time "time"
)

type testDoubleClient struct {
	c    client.Client
	name string
}

func NewTestDoubleClient(name string, c client.Client) TestDoubleClient {
	return &testDoubleClient{c: c, name: name}
}

func (c *testDoubleClient) CallDouble(ctx context.Context, req *CallReq, opts ...client.CallOption) (*CallRsp, error) {
	opts = append(opts,
		v3.Method(http.MethodPost),
		v3.Path("/v1/testdouble/call/name/{name}"),
		v3.Body("*"),
	)
	opts = append(opts, client.WithRequestTimeout(time.Second*5))
	rsp := &CallRsp{}
	err := c.c.Call(ctx, c.c.NewRequest(c.name, "TestDouble.CallDouble", req), rsp, opts...)
	if err != nil {
		return nil, err
	}
	return rsp, nil
}

type testDoubleServer struct {
	TestDoubleServer
}

func (h *testDoubleServer) CallDouble(ctx context.Context, req *CallReq, rsp *CallRsp) error {
	var cancel context.CancelFunc
	ctx, cancel = context.WithTimeout(ctx, time.Second*5)
	defer cancel()
	return h.TestDoubleServer.CallDouble(ctx, req, rsp)
}

func RegisterTestDoubleServer(s server.Server, sh TestDoubleServer, opts ...server.HandlerOption) error {
	type testDouble interface {
		CallDouble(ctx context.Context, req *CallReq, rsp *CallRsp) error
	}
	type TestDouble struct {
		testDouble
	}
	h := &testDoubleServer{sh}
	var nopts []server.HandlerOption
	for _, endpoint := range TestDoubleEndpoints {
		nopts = append(nopts, api.WithEndpoint(&endpoint))
	}
	return s.Handle(s.NewHandler(&TestDouble{h}, append(nopts, opts...)...))
}

type testClient struct {
	c    client.Client
	name string
}

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

func (c *testClient) CallRepeatedString(ctx context.Context, req *CallReq, opts ...client.CallOption) (*CallRsp, error) {
	opts = append(opts,
		v3.Method(http.MethodPost),
		v3.Path("/v1/test/call_repeated_string"),
		v3.Body("*"),
	)
	opts = append(opts, client.WithRequestTimeout(time.Second*5))
	rsp := &CallRsp{}
	err := c.c.Call(ctx, c.c.NewRequest(c.name, "Test.CallRepeatedString", req), rsp, opts...)
	if err != nil {
		return nil, err
	}
	return rsp, nil
}

func (c *testClient) CallRepeatedInt64(ctx context.Context, req *CallReq, opts ...client.CallOption) (*CallRsp, error) {
	opts = append(opts,
		v3.Method(http.MethodPost),
		v3.Path("/v1/test/call_repeated_int64"),
		v3.Body("*"),
	)
	opts = append(opts, client.WithRequestTimeout(time.Second*5))
	rsp := &CallRsp{}
	err := c.c.Call(ctx, c.c.NewRequest(c.name, "Test.CallRepeatedInt64", req), rsp, opts...)
	if err != nil {
		return nil, err
	}
	return rsp, nil
}

func (c *testClient) Call(ctx context.Context, req *CallReq, opts ...client.CallOption) (*CallRsp, error) {
	opts = append(opts,
		v3.Method(http.MethodPost),
		v3.Path("/v1/test/call/{name}"),
		v3.Body("*"),
	)
	opts = append(opts,
		v3.Cookie("Csrftoken", "true"),
		v3.Header("Clientid", "true"),
	)
	opts = append(opts, client.WithRequestTimeout(time.Second*5))
	rsp := &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
}

func (c *testClient) CallError(ctx context.Context, req *CallReq1, opts ...client.CallOption) (*CallRsp1, error) {
	opts = append(opts,
		v3.Method(http.MethodPost),
		v3.Path("/v1/test/callerror/{name}"),
		v3.Body("*"),
	)
	rsp := &CallRsp1{}
	err := c.c.Call(ctx, c.c.NewRequest(c.name, "Test.CallError", req), rsp, opts...)
	if err != nil {
		return nil, err
	}
	return rsp, nil
}

type testServer struct {
	TestServer
}

func (h *testServer) CallRepeatedString(ctx context.Context, req *CallReq, rsp *CallRsp) error {
	var cancel context.CancelFunc
	ctx, cancel = context.WithTimeout(ctx, time.Second*5)
	defer cancel()
	return h.TestServer.CallRepeatedString(ctx, req, rsp)
}

func (h *testServer) CallRepeatedInt64(ctx context.Context, req *CallReq, rsp *CallRsp) error {
	var cancel context.CancelFunc
	ctx, cancel = context.WithTimeout(ctx, time.Second*5)
	defer cancel()
	return h.TestServer.CallRepeatedInt64(ctx, req, rsp)
}

func (h *testServer) Call(ctx context.Context, req *CallReq, rsp *CallRsp) error {
	var cancel context.CancelFunc
	ctx, cancel = context.WithTimeout(ctx, time.Second*5)
	defer cancel()
	v31.FillRequest(ctx, req,
		v31.Header("Clientid", "true"),
		v31.Cookie("Csrftoken", "true"),
	)
	return h.TestServer.Call(ctx, req, rsp)
}

func (h *testServer) CallError(ctx context.Context, req *CallReq1, rsp *CallRsp1) error {
	return h.TestServer.CallError(ctx, req, rsp)
}

func RegisterTestServer(s server.Server, sh TestServer, opts ...server.HandlerOption) error {
	type test interface {
		CallRepeatedString(ctx context.Context, req *CallReq, rsp *CallRsp) error
		CallRepeatedInt64(ctx context.Context, req *CallReq, rsp *CallRsp) error
		Call(ctx context.Context, req *CallReq, rsp *CallRsp) error
		CallError(ctx context.Context, req *CallReq1, rsp *CallRsp1) error
	}
	type Test struct {
		test
	}
	h := &testServer{sh}
	var nopts []server.HandlerOption
	for _, endpoint := range TestEndpoints {
		nopts = append(nopts, api.WithEndpoint(&endpoint))
	}
	return s.Handle(s.NewHandler(&Test{h}, append(nopts, opts...)...))
}