You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.9 KiB
71 lines
1.9 KiB
package handlers
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/gorilla/mux"
|
|
"mazeratsgen/internal/tables"
|
|
"net/http"
|
|
)
|
|
|
|
func LoadHandlers(r *mux.Router) {
|
|
r.HandleFunc("/api/generate/name", GenName)
|
|
|
|
r.HandleFunc("/api/generate/spell", GenSpell)
|
|
r.HandleFunc("/api/generate/potion", GenPotion)
|
|
r.HandleFunc("/api/generate/mutation", GenMutation)
|
|
r.HandleFunc("/api/generate/insanity", GenInsanity)
|
|
r.HandleFunc("/api/generate/catastrophe", GenCatastrophe)
|
|
|
|
r.HandleFunc("/api/generate/monster", GenMonster)
|
|
r.HandleFunc("/api/monster/{seed}", Monster)
|
|
|
|
r.HandleFunc("/api/generate/character", GenCharacter)
|
|
r.HandleFunc("/api/character/{seed}", Character)
|
|
|
|
r.HandleFunc("/api/generate/npc", GenNPC)
|
|
r.HandleFunc("/api/npc/{seed}", NPC)
|
|
|
|
r.HandleFunc("/api/generate/character", GenCharacter)
|
|
|
|
r.HandleFunc("/api/generate/city", GenCity)
|
|
r.HandleFunc("/api/city/{seed}", City)
|
|
|
|
r.HandleFunc("/api/generate/dungeon", GenDungeon)
|
|
r.HandleFunc("/api/dungeon/{seed}", Dungeon)
|
|
|
|
r.HandleFunc("/api/roll/{xdy}", Roll)
|
|
}
|
|
|
|
func WriteResponse(w http.ResponseWriter, r *http.Request, i interface{}, t string) {
|
|
var response interface{}
|
|
var err error
|
|
if r.Header.Get("Accept") == "text/plain" {
|
|
w.Header().Set("Content-Type", "text/plain")
|
|
response, err = tables.ConvertToText(i, t)
|
|
if err != nil {
|
|
// TODO: Return json error
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
w.Write([]byte(err.Error()))
|
|
return
|
|
}
|
|
} else {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
response, err = tables.ConvertToJSON(i)
|
|
if err != nil {
|
|
// TODO: Return json error
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
w.Write([]byte(err.Error()))
|
|
return
|
|
}
|
|
}
|
|
w.WriteHeader(http.StatusOK)
|
|
switch response.(type) {
|
|
case []byte:
|
|
w.Write(response.([]byte))
|
|
case string:
|
|
w.Write([]byte(response.(string)))
|
|
default:
|
|
err := fmt.Sprintf("Error writing response, '%v' not handled", response)
|
|
w.Write([]byte(err))
|
|
}
|
|
}
|
|
|