package location import ( "encoding/json" "fmt" "log" "net/http" "github.com/chubin/wttr.in/internal/routing" ) // Response provides routing interface to the geo cache. func (c *Cache) Response(r *http.Request) *routing.Cadre { var ( locationName = r.URL.Query().Get("location") loc *Location bytes []byte err error ) if locationName == "" { return errorResponse("location is not specified") } loc, err = c.Resolve(locationName) if err != nil { log.Println("geo/location error:", locationName) return errorResponse(fmt.Sprint(err)) } bytes, err = json.Marshal(loc) if err != nil { return errorResponse(fmt.Sprint(err)) } return &routing.Cadre{Body: bytes} } func errorResponse(s string) *routing.Cadre { return &routing.Cadre{Body: []byte( fmt.Sprintf(`{"error": %q}`, s), )} }