Codebase list golang-github-go-kit-kit / bd82318c-0d39-41b5-bf0b-5c2310cdd036/main examples / stringsvc3 / transport.go
bd82318c-0d39-41b5-bf0b-5c2310cdd036/main

Tree @bd82318c-0d39-41b5-bf0b-5c2310cdd036/main (Download .tar.gz)

transport.go @bd82318c-0d39-41b5-bf0b-5c2310cdd036/main

1ed136b
 
 
bcbfb94
4a29204
1ed136b
bcbfb94
 
1ed136b
 
 
 
 
 
 
 
e103562
 
 
 
1ed136b
 
 
 
 
 
 
 
 
 
 
5f48909
1ed136b
bcbfb94
1ed136b
 
 
 
 
5f48909
1ed136b
bcbfb94
1ed136b
 
 
 
 
5f48909
1ed136b
bcbfb94
1ed136b
 
 
 
 
5f48909
1ed136b
 
 
5f48909
bcbfb94
 
 
 
 
 
 
 
1ed136b
 
 
 
 
 
e103562
1ed136b
 
 
 
 
 
 
 
 
package main

import (
	"bytes"
	"context"
	"encoding/json"
	"io/ioutil"
	"net/http"

	"github.com/go-kit/kit/endpoint"
)

func makeUppercaseEndpoint(svc StringService) endpoint.Endpoint {
	return func(ctx context.Context, request interface{}) (interface{}, error) {
		req := request.(uppercaseRequest)
		v, err := svc.Uppercase(req.S)
		if err != nil {
			return uppercaseResponse{v, err.Error()}, nil
		}
		return uppercaseResponse{v, ""}, nil
	}
}

func makeCountEndpoint(svc StringService) endpoint.Endpoint {
	return func(ctx context.Context, request interface{}) (interface{}, error) {
		req := request.(countRequest)
		v := svc.Count(req.S)
		return countResponse{v}, nil
	}
}

func decodeUppercaseRequest(_ context.Context, r *http.Request) (interface{}, error) {
	var request uppercaseRequest
	if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
		return nil, err
	}
	return request, nil
}

func decodeCountRequest(_ context.Context, r *http.Request) (interface{}, error) {
	var request countRequest
	if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
		return nil, err
	}
	return request, nil
}

func decodeUppercaseResponse(_ context.Context, r *http.Response) (interface{}, error) {
	var response uppercaseResponse
	if err := json.NewDecoder(r.Body).Decode(&response); err != nil {
		return nil, err
	}
	return response, nil
}

func encodeResponse(_ context.Context, w http.ResponseWriter, response interface{}) error {
	return json.NewEncoder(w).Encode(response)
}

func encodeRequest(_ context.Context, r *http.Request, request interface{}) error {
	var buf bytes.Buffer
	if err := json.NewEncoder(&buf).Encode(request); err != nil {
		return err
	}
	r.Body = ioutil.NopCloser(&buf)
	return nil
}

type uppercaseRequest struct {
	S string `json:"s"`
}

type uppercaseResponse struct {
	V   string `json:"v"`
	Err string `json:"err,omitempty"`
}

type countRequest struct {
	S string `json:"s"`
}

type countResponse struct {
	V int `json:"v"`
}