@@ -2,7 +2,9 @@ package test
22
33import (
44 "encoding/json"
5+ "fmt"
56 "math/big"
7+ "time"
68)
79
810func init () {
@@ -27,6 +29,8 @@ func init() {
2729 nilMap ,
2830 & nilMap ,
2931 map [string ]* json.RawMessage {"hello" : pRawMessage (json .RawMessage ("[]" ))},
32+ map [Date ]bool {{}: true },
33+ map [Date2 ]bool {{}: true },
3034 )
3135 unmarshalCases = append (unmarshalCases , unmarshalCase {
3236 ptr : (* map [string ]string )(nil ),
@@ -37,6 +41,20 @@ func init() {
3741 }, unmarshalCase {
3842 ptr : (* map [string ]* json.RawMessage )(nil ),
3943 input : "{\" test\" :[{\" key\" :\" value\" }]}" ,
44+ }, unmarshalCase {
45+ ptr : (* map [Date ]bool )(nil ),
46+ input : `{
47+ "2018-12-12": true,
48+ "2018-12-13": true,
49+ "2018-12-14": true
50+ }` ,
51+ }, unmarshalCase {
52+ ptr : (* map [Date2 ]bool )(nil ),
53+ input : `{
54+ "2018-12-12": true,
55+ "2018-12-13": true,
56+ "2018-12-14": true
57+ }` ,
4058 })
4159}
4260
@@ -49,3 +67,51 @@ type MyString string
4967func (ms MyString ) Hello () string {
5068 return string (ms )
5169}
70+
71+ type Date struct {
72+ time.Time
73+ }
74+
75+ func (d * Date ) UnmarshalJSON (b []byte ) error {
76+ dateStr := string (b ) // something like `"2017-08-20"`
77+
78+ if dateStr == "null" {
79+ return nil
80+ }
81+
82+ t , err := time .Parse (`"2006-01-02"` , dateStr )
83+ if err != nil {
84+ return fmt .Errorf ("cant parse date: %#v" , err )
85+ }
86+
87+ d .Time = t
88+ return nil
89+ }
90+
91+ func (d * Date ) MarshalJSON () ([]byte , error ) {
92+ return []byte (d .Time .Format ("2006-01-02" )), nil
93+ }
94+
95+ type Date2 struct {
96+ time.Time
97+ }
98+
99+ func (d Date2 ) UnmarshalJSON (b []byte ) error {
100+ dateStr := string (b ) // something like `"2017-08-20"`
101+
102+ if dateStr == "null" {
103+ return nil
104+ }
105+
106+ t , err := time .Parse (`"2006-01-02"` , dateStr )
107+ if err != nil {
108+ return fmt .Errorf ("cant parse date: %#v" , err )
109+ }
110+
111+ d .Time = t
112+ return nil
113+ }
114+
115+ func (d Date2 ) MarshalJSON () ([]byte , error ) {
116+ return []byte (d .Time .Format ("2006-01-02" )), nil
117+ }
0 commit comments