about summary refs log tree commit diff stats
path: root/src/tmp.rkt
blob: 089e066cfa7917bc7d1b2a2d9a1a8c4c4be27d0d (plain) (blame)
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
#lang racket

; (require sugar)

(define test-data '#hash(("id" . 12)
                         ("name" . "butterfree")
                         ("sprite" . "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/12.png")
                         ("stats"
                          . (#hasheq((base_stat . 60)
                                     (effort . 0)
                                     (stat . #hasheq((name . "hp") (url . "https://pokeapi.co/api/v2/stat/1/"))))
                             #hasheq((base_stat . 45)
                                     (effort . 0)
                                     (stat . #hasheq((name . "attack") (url . "https://pokeapi.co/api/v2/stat/2/"))))
                             #hasheq((base_stat . 50)
                                     (effort . 0)
                                     (stat . #hasheq((name . "defense") (url . "https://pokeapi.co/api/v2/stat/3/"))))
                             #hasheq((base_stat . 90)
                                     (effort . 2)
                                     (stat . #hasheq((name . "special-attack") (url . "https://pokeapi.co/api/v2/stat/4/"))))
                             #hasheq((base_stat . 80)
                                     (effort . 1)
                                     (stat . #hasheq((name . "special-defense") (url . "https://pokeapi.co/api/v2/stat/5/"))))
                             #hasheq((base_stat . 70)
                                     (effort . 0)
                                     (stat . #hasheq((name . "speed") (url . "https://pokeapi.co/api/v2/stat/6/"))))))
                         ("types"
                          . (#hasheq((slot . 1)
                                     (type . #hasheq((name . "bug") (url . "https://pokeapi.co/api/v2/type/7/"))))
                             #hasheq((slot . 2)
                                     (type . #hasheq((name . "flying") (url . "https://pokeapi.co/api/v2/type/3/"))))))))


; (define d (dict->list test-data)) ; or...you know...could convert from hash table to list?


; (hash? (car (hash-ref test-data "stats"))) ; #t --- BOOM! this gets us a hash table! 
; (display (car (hash-ref test-data "stats")))
; (list? (hash-ref test-data "stats")) ;; #t

;; "stats" and "types" AREN'T exactly nested hash tables! They're lists, with hash tables embedded in them! 
;; SO! I need a way to test for if something is a LIST, and then if it is a LIST I think then I hash map through that!

;; NEXT STEPS -> https://stackoverflow.com/questions/13504302/racket-scheme-filtering

; (hash-ref test-data "stats") ; all stats
; (hash-ref (car (hash-ref test-data "stats")) 'base_stat) ; value for a given stat
; (hash-ref (hash-ref (car (hash-ref test-data "stats")) 'stat) 'name) ; name for a given stat

;  [(list? v) (map (lambda (x) (inspector x)) v)]
;  [(hash? (car (hash-ref k "stats")) (map (lambda (x) (inspector x)) v))] 

(define (inspector h)
  "display the contents of a hash table for human eyeballs and let the hash table fall back out"
  (hash-map h
            (lambda (k v)
              (cond [(list? v) (cond
                                 [(hash? (car (hash-ref k "stats")) (map (lambda (x) (inspector x) v)))] ; this is probably dumb, since it'll require at least another level of nesting...
                                 [map (lambda (x) (inspector x)) v])]
                    [(display (~a "  key: " k "\nvalue: " v "\n=====\n"))])))
  h)

(inspector test-data)