diff options
| author | Felix Hanley <felix@userspace.com.au> | 2016-12-05 08:16:58 +0000 |
|---|---|---|
| committer | Felix Hanley <felix@userspace.com.au> | 2016-12-05 08:16:58 +0000 |
| commit | b049991a46a2f619344bd6e915745703864d0134 (patch) | |
| tree | ec1d3897a7b69c7c63a3774d4c42dfbb8cb46432 /src/dict2rest/handlers.go | |
| parent | e1c3d6f7db06d592538f1162b2b6b9f1b6efa330 (diff) | |
| download | go-dict2rest-b049991a46a2f619344bd6e915745703864d0134.tar.gz go-dict2rest-b049991a46a2f619344bd6e915745703864d0134.tar.bz2 | |
Diffstat (limited to 'src/dict2rest/handlers.go')
| -rw-r--r-- | src/dict2rest/handlers.go | 103 |
1 files changed, 0 insertions, 103 deletions
diff --git a/src/dict2rest/handlers.go b/src/dict2rest/handlers.go deleted file mode 100644 index 024a8d6..0000000 --- a/src/dict2rest/handlers.go +++ /dev/null @@ -1,103 +0,0 @@ -package main - -import ( - "encoding/json" - "github.com/julienschmidt/httprouter" - "golang.org/x/net/dict" - "log" - "net/http" - "strconv" - "strings" -) - -type jsonError struct { - Code int `json:"code"` - Message string `json:"message"` -} - -func render(w http.ResponseWriter, status int, body interface{}) { - w.WriteHeader(status) - w.Header().Set("Content-Type", "application/json; charset=UTF-8") - json.NewEncoder(w).Encode(body) -} - -func formatError(e error) jsonError { - parts := strings.SplitN(e.Error(), "[", 2) - log.Printf("Error %s", parts[0]) - parts = strings.SplitN(parts[0], " ", 2) - code, err := strconv.Atoi(parts[0]) - if err != nil { - return jsonError{ - Code: 500, - Message: "Error parsing error o_0", - } - } - return jsonError{ - Code: code, - Message: strings.TrimSpace(parts[1]), - } -} - -func formatDefinitions(defs []*dict.Defn) ([]definition, error) { - definitions := make([]definition, len(defs)) - for i, def := range defs { - definitions[i] = definition{ - Dictionary: def.Dict.Desc, - Word: def.Word, - Definition: string(def.Text[:]), - } - } - return definitions, nil -} - -func dictDatabases(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { - client, err := getDictClient() - if err != nil { - log.Printf("Unable to connect to dict server at %s", dictServer) - render(w, 500, jsonError{420, "Server temporarily unavailable"}) - return - } - - defer client.Close() - - dicts, err := getDictionaries(client) - if err != nil { - render(w, 400, formatError(err)) - return - } - render(w, 200, dicts) -} - -func dictDefine(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { - client, err := getDictClient() - if err != nil { - render(w, 500, jsonError{420, "Server temporarily unavailable"}) - return - } - defer client.Close() - - word := ps.ByName("word") - queryValues := r.URL.Query() - d := queryValues.Get("dict") - - var dict string - - if d != "" { - dict = d - } else { - dict = "*" - } - - defs, err := client.Define(dict, word) - if err != nil { - render(w, 400, formatError(err)) - return - } - - definitions, err := formatDefinitions(defs) - if err != nil { - render(w, 500, err) - return - } - render(w, 200, definitions) -} |
