1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package endpoint
- import (
- "context"
- "errors"
- "github.com/go-kit/kit/endpoint"
- "github.com/longjoy/micro-go-course/section35/zipkin-kit/string-service/service"
- "strings"
- )
- // StringEndpoint define endpoint
- type StringEndpoints struct {
- StringEndpoint endpoint.Endpoint
- HealthCheckEndpoint endpoint.Endpoint
- }
- func (se StringEndpoints) Concat(a, b string) (string, error) {
- ctx := context.Background()
- resp, err := se.StringEndpoint(ctx, StringRequest{
- RequestType: "Concat",
- A: a,
- B: b,
- })
- response := resp.(StringResponse)
- return response.Result, err
- }
- func (se StringEndpoints) Diff(ctx context.Context, a, b string) (string, error) {
- resp, err := se.StringEndpoint(ctx, StringRequest{
- RequestType: "Diff",
- A: a,
- B: b,
- })
- response := resp.(StringResponse)
- return response.Result, err
- }
- func (StringEndpoints) HealthCheck() bool {
- return false
- }
- var (
- ErrInvalidRequestType = errors.New("RequestType has only two type: Concat, Diff")
- )
- // StringRequest define request struct
- type StringRequest struct {
- RequestType string `json:"request_type"`
- A string `json:"a"`
- B string `json:"b"`
- }
- // StringResponse define response struct
- type StringResponse struct {
- Result string `json:"result"`
- Error error `json:"error"`
- }
- // MakeStringEndpoint make endpoint
- func MakeStringEndpoint(ctx context.Context, svc service.Service) endpoint.Endpoint {
- return func(ctx1 context.Context, request interface{}) (response interface{}, err error) {
- req := request.(StringRequest)
- var (
- res, a, b string
- opError error
- )
- a = req.A
- b = req.B
- if strings.EqualFold(req.RequestType, "Concat") {
- res, _ = svc.Concat(a, b)
- } else if strings.EqualFold(req.RequestType, "Diff") {
- res, _ = svc.Diff(ctx, a, b)
- } else {
- return nil, ErrInvalidRequestType
- }
- return StringResponse{Result: res, Error: opError}, nil
- }
- }
- // HealthRequest 健康检查请求结构
- type HealthRequest struct{}
- // HealthResponse 健康检查响应结构
- type HealthResponse struct {
- Status bool `json:"status"`
- }
- // MakeHealthCheckEndpoint 创建健康检查Endpoint
- func MakeHealthCheckEndpoint(svc service.Service) endpoint.Endpoint {
- return func(ctx context.Context, request interface{}) (response interface{}, err error) {
- status := svc.HealthCheck()
- return HealthResponse{status}, nil
- }
- }
|