-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcommandMap.go
More file actions
72 lines (65 loc) · 1.45 KB
/
commandMap.go
File metadata and controls
72 lines (65 loc) · 1.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package main
import (
"encoding/json"
"fmt"
"github.com/mamoss-oss/pokedexcli/internal/api"
)
type AreaData struct {
Count int `json:"count"`
Next *string `json:"next"`
Previous *string `json:"previous"`
Results []struct {
Name string `json:"name"`
URL string `json:"url"`
} `json:"results"`
}
func commandMap(c *config, args ...string) error {
body, err := api.CacheOrGet(c.next, &c.cache)
if err != nil {
return err
}
areas := AreaData{}
err = json.Unmarshal(body, &areas)
if err != nil {
return err
}
updateConf(c, &areas)
printAreas(&areas)
return err
}
func commandMapb(c *config, args ...string) error {
if c.previous == "" {
fmt.Println("Previous is empty")
return nil
}
body, err := api.CacheOrGet(c.previous, &c.cache)
if err != nil {
return err
}
areas := AreaData{}
err = json.Unmarshal(body, &areas)
if err != nil {
return err
}
updateConf(c, &areas)
printAreas(&areas)
return err
}
// updateConf accepts references to config and AreaData structs.
// It validates if the received data for previous or next is nil,
// before updating the config struct.
func updateConf(c *config, areas *AreaData) {
if areas.Previous != nil {
c.previous = *areas.Previous
}
if areas.Next != nil {
c.next = *areas.Next
}
}
// printAreas accepts a reference to an AreaData struct.
// It print ranges over the result names.
func printAreas(areas *AreaData) {
for _, area := range areas.Results {
println(area.Name)
}
}