req := request.(countRequest)
v := svc.Count(ctx, req.S)
return countResponse{v}, nil
}
}
func main() {
var (
uppercaseEndpoint endpoint.Endpoint
countEndpoint endpoint.Endpoint
svc stringService
)
rand.Seed(time.Now().Unix())
svc = stringService{}
uppercaseEndpoint = makeUppercaseEndpoint(svc)
uppercaseEndpoint = annotate("fourth")(uppercaseEndpoint)
uppercaseEndpoint = myCustomMiddleware("third")(uppercaseEndpoint)
uppercaseEndpoint = annotate("second")(uppercaseEndpoint)
uppercaseEndpoint = annotate("first")(uppercaseEndpoint)
countEndpoint = makeCountEndpoint(svc)
countEndpoint = annotate("fifth")(countEndpoint)
countEndpoint = annotate("fourth")(countEndpoint)
countEndpoint = myCustomMiddleware("third")(countEndpoint)
countEndpoint = annotate("second")(countEndpoint)
countEndpoint = annotate("first")(countEndpoint)
uppercaseHandler := httptransport.NewServer(
uppercaseEndpoint,
decodeUppercaseRequest,
encodeResponse,
)
countHandler := httptransport.NewServer(
countEndpoint,
decodeCountRequest,
encodeResponse,
)
http.Handle("/uppercase", uppercaseHandler)
http.Handle("/count", countHandler)
log.Println("Listening for requests...")
log.Fatal(http.ListenAndServe(":8080", nil))
}
func decodeUppercaseRequest(ctx 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(ctx 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 encodeResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error {
// Print the custom ID on a http.Header
id, ok := ctx.Value(ContextKeyMyRandomID).(string)
if ok {
w.Header().Add("X-MyCustom-Id", id)
}
return json.NewEncoder(w).Encode(response)
}
func myCustomMiddleware(s string) endpoint.Middleware {