package main import ( "fmt" "net/http" "encoding/json" "io" "k3gtpi.jumpingcrab.com/go-learning/pokedexcli/internal/pokecache" ) func commandMap(p *PokedexConfig, c *pokecache.Cache) error { var baseUrl string if p.Next == nil { baseUrl = "https://pokeapi.co/api/v2/location-area/" } else { baseUrl = *p.Next } var body []byte // Check if respones is available in cache if resp, exists := c.Get(baseUrl); exists { body = resp } else { client := &http.Client{} resp, err := client.Get(baseUrl) if err != nil { return fmt.Errorf("could not make request to Pokedex API! Err: %w", err) } body, err = io.ReadAll(resp.Body) defer resp.Body.Close() if resp.StatusCode > 299 { return fmt.Errorf("request returned non-200 code! Code: %v Body: %v", resp.StatusCode, body) } if err != nil { return fmt.Errorf("could not read request body! Err: %w", err) } c.Add(baseUrl, body) } if err := json.Unmarshal(body, &p); err != nil { return fmt.Errorf("could not unmarshal response! Err: %w", err) } for _, location := range p.Results { fmt.Println(location["name"]) } return nil }