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

package pb

import (
	context "context"
	http "net/http"

	v3 "go.unistack.org/micro-client-http/v3"
	api "go.unistack.org/micro/v3/api"
	client "go.unistack.org/micro/v3/client"
	server "go.unistack.org/micro/v3/server"
)

type githubClient struct {
	c    client.Client
	name string
}

func NewGithubClient(name string, c client.Client) GithubClient {
	return &githubClient{c: c, name: name}
}

func (c *githubClient) LookupUser(ctx context.Context, req *LookupUserReq, opts ...client.CallOption) (*LookupUserRsp, error) {
	opts = append(opts,
		v3.Method(http.MethodGet),
		v3.Path("/users/{username}"),
	)
	rsp := &LookupUserRsp{}
	err := c.c.Call(ctx, c.c.NewRequest(c.name, "Github.LookupUser", req), rsp, opts...)
	if err != nil {
		return nil, err
	}
	return rsp, nil
}

func (c *githubClient) LookupUserWithoutPath(ctx context.Context, req *LookupUserReq, opts ...client.CallOption) (*LookupUserRsp, error) {
	opts = append(opts,
		v3.Method(http.MethodGet),
		v3.Path("/{username}"),
	)
	rsp := &LookupUserRsp{}
	err := c.c.Call(ctx, c.c.NewRequest(c.name, "Github.LookupUserWithoutPath", req), rsp, opts...)
	if err != nil {
		return nil, err
	}
	return rsp, nil
}

type githubServer struct {
	GithubServer
}

func (h *githubServer) LookupUser(ctx context.Context, req *LookupUserReq, rsp *LookupUserRsp) error {
	return h.GithubServer.LookupUser(ctx, req, rsp)
}

func (h *githubServer) LookupUserWithoutPath(ctx context.Context, req *LookupUserReq, rsp *LookupUserRsp) error {
	return h.GithubServer.LookupUserWithoutPath(ctx, req, rsp)
}

func RegisterGithubServer(s server.Server, sh GithubServer, opts ...server.HandlerOption) error {
	type github interface {
		LookupUser(ctx context.Context, req *LookupUserReq, rsp *LookupUserRsp) error
		LookupUserWithoutPath(ctx context.Context, req *LookupUserReq, rsp *LookupUserRsp) error
	}
	type Github struct {
		github
	}
	h := &githubServer{sh}
	var nopts []server.HandlerOption
	for _, endpoint := range GithubEndpoints {
		nopts = append(nopts, api.WithEndpoint(&endpoint))
	}
	return s.Handle(s.NewHandler(&Github{h}, append(nopts, opts...)...))
}