Skip to content

Instantly share code, notes, and snippets.

@ericraio
Created January 3, 2021 21:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ericraio/04cd636690ebde0955add27d3900d63c to your computer and use it in GitHub Desktop.
Save ericraio/04cd636690ebde0955add27d3900d63c to your computer and use it in GitHub Desktop.
package data
import (
"bytes"
"compress/gzip"
"encoding/gob"
"fmt"
"io/ioutil"
"strings"
"github.com/ericraio/landlord/src/card"
"github.com/ericraio/landlord/src/scryfall"
"github.com/markbates/pkger"
)
var DATA []scryfall.ScryfallCard
type CardData struct {
Cards []scryfall.ScryfallCard
}
func NewCardData() *CardData {
return &CardData{}
}
func (cd *CardData) FindByName(cardName string) *card.Card {
for _, c := range cd.Cards {
if strings.EqualFold(c.Name, cardName) {
return c.ConvertToCard()
}
}
return nil
}
func (cd *CardData) Load() error {
if len(cd.Cards) > 0 {
return nil
}
if len(DATA) > 0 {
cd.Cards = DATA
return nil
}
fi, err := pkger.Open("/data/all_cards.landlord")
if err != nil {
fi, err = pkger.Open("../../data/all_cards.landlord")
if err != nil {
return err
}
}
defer func() {
err := fi.Close()
if err != nil {
fmt.Println(err)
}
}()
fz, err := gzip.NewReader(fi)
if err != nil {
return err
}
defer func() {
err := fz.Close()
if err != nil {
fmt.Println(err)
}
}()
s, err := ioutil.ReadAll(fz)
if err != nil {
return err
}
buf := bytes.NewBuffer(s)
dec := gob.NewDecoder(buf)
if err := dec.Decode(&cd.Cards); err != nil {
return err
}
DATA = cd.Cards
return nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment