Files
vulture/handlerWrapper.go
T
didier.amyot da245fdf27 - fix bug
- can now set "style" on geojson elements
2014-06-01 23:07:14 -04:00

39 lines
859 B
Go

package main
import (
"encoding/json"
"log"
"net/http"
"time"
)
type errorWrapper struct {
Error string `json:"error"`
}
type ApiHandler func(w http.ResponseWriter, request *http.Request) (interface{}, error)
func (this ApiHandler) addEnlapsedTimeIfPossible(enlapsedTime time.Duration, obj interface{}) {
if dict, ok := obj.(map[string]interface{}); ok {
dict["enlapsed_time"] = enlapsedTime.Seconds()
}
}
func (this ApiHandler) ServeHTTP(w http.ResponseWriter, request *http.Request) {
log.Println("request for", request.URL)
t := time.Now()
ret, err := this(w, request)
this.addEnlapsedTimeIfPossible(time.Since(t), ret)
if err != nil {
log.Println(err)
ret = &errorWrapper{err.Error()}
w.WriteHeader(500)
} else {
w.WriteHeader(200)
}
enc := json.NewEncoder(w)
if err := enc.Encode(ret); err != nil {
log.Println(err)
}
}