fuzzyworld

find-stone-beer / files / beer.go

beer.go

Blame: the commit that last changed each line · file · history

352a2a02 2023-08-22 Pavel Safronov1package main
2
3import (
4 "encoding/json"
5 "strconv"
6 "time"
7)
8
9type Beer struct {
10 Brand string `json:"brand"`
11 Package string `json:"package"`
12 Delivered time.Time `json:"delivered"`
13 Expires time.Time `json:"expires"`
14}
15
16func (b *Beer) UnmarshalJSON(data []byte) error {
17 var objmap map[string]json.RawMessage
18 err := json.Unmarshal(data, &objmap)
19 if err != nil {
20 return err
21 }
22 for key, value := range objmap {
23 if key == "brand" {
24 err = json.Unmarshal(value, &b.Brand)
25 if err != nil {
26 return err
27 }
28 } else if key == "package" {
29 err = json.Unmarshal(value, &b.Package)
30 if err != nil {
31 return err
32 }
33 } else if key == "delivered" {
34 var delivered string
35 err = json.Unmarshal(value, &delivered)
36 if err != nil {
37 return err
38 }
39 deliveredSeconds, err := strconv.ParseInt(delivered, 10, 64)
40 if err != nil {
41 return err
42 }
43 b.Delivered = time.Unix(deliveredSeconds, 0)
44 } else if key == "expires" {
45 var expires string
46 err = json.Unmarshal(value, &expires)
47 if err != nil {
48 return err
49 }
50 expiresSeconds, err := strconv.ParseInt(expires, 10, 64)
51 if err != nil {
52 return err
53 }
54 b.Expires = time.Unix(expiresSeconds, 0)
55 }
56 }
57 return nil
58}