package main import ( "encoding/json" "io/ioutil" "log" "net/http" "strconv" "git.saintnet.tech/tomecraft/tome_lib" "github.com/gorilla/mux" ) type CardDB map[tome_lib.CardType]*tome_lib.CardView func main() { db := LoadCards("cards.json") router := mux.NewRouter().StrictSlash(true) router.HandleFunc("/", homePage).Methods("GET") router.HandleFunc("/card/{id}", db.lookupCard).Methods("GET") log.Fatal(http.ListenAndServe(":7637", router)) } func homePage(res http.ResponseWriter, req *http.Request) { json.NewEncoder(res).Encode(nil) } func (c *CardDB) lookupCard(res http.ResponseWriter, req *http.Request) { vars := mux.Vars(req) id, err := strconv.Atoi(vars["id"]) if err != nil { log.Printf("Error: tryied to look up a non int:%v", err) http.Error(res, "Bad request - need to lookup an int", 400) return } card, ok := (*c)[tome_lib.CardType(id)] if !ok { http.Error(res, "Bad request - no such card", 404) return } json.NewEncoder(res).Encode(card) } func LoadCards(file string) CardDB { content, err := ioutil.ReadFile(file) // the file is inside the local directory if err != nil { log.Println("couldn't load file") log.Fatal(err) } var cardConfs []*CardConfig err = json.Unmarshal([]byte(content), &cardConfs) if err != nil { log.Println("Couldn't load json") log.Fatal(err) } cardDB := make(CardDB) for _, v := range cardConfs { t, err := tome_lib.CardTypeString(v.CodeName) if err != nil { log.Println("Invalid card imported") log.Fatal(err) } cardDB[t] = &tome_lib.CardView{ Name: "", Type: int(t), Rank: v.Rank, ImageURI: v.ImageURI, Flavour: v.Flavour, Rules: v.Rules, } if v.Name == "" { cardDB[t].Name = v.CodeName } } return cardDB }