-
Notifications
You must be signed in to change notification settings - Fork 0
/
structs.go
144 lines (109 loc) · 2.69 KB
/
structs.go
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package tzkt
import (
"bytes"
"encoding/json"
"fmt"
"math/big"
"strings"
)
// FlexInt64 is a int64 type that accepts either string or int value when Unmarshaling
type FlexInt64 int64
func (fi *FlexInt64) UnmarshalJSON(data []byte) error {
if data[0] != '"' {
return json.Unmarshal(data, (*int64)(fi))
}
return json.Unmarshal(bytes.Trim(data, `"`), (*int64)(fi))
}
type NullableInt int64
func (t *NullableInt) UnmarshalJSON(data []byte) error {
var num int64
err := json.Unmarshal(data, &num)
if err != nil {
*t = NullableInt(-1)
return nil
}
*t = NullableInt(num)
return nil
}
// FlexBool is a bool type that accepts either string or bool value when Unmarshaling
type FlexBool bool
func (b *FlexBool) UnmarshalJSON(data []byte) error {
var _b bool
err := json.Unmarshal(bytes.Trim(data, `"`), &_b)
if err != nil {
return nil
}
*b = FlexBool(_b)
return nil
}
type MIMEFormat string
func (m *MIMEFormat) UnmarshalJSON(data []byte) error {
if data[0] == 91 {
data = bytes.Trim(data, "[]")
}
return json.Unmarshal(data, (*string)(m))
}
type FileFormats []FileFormat
func (f *FileFormats) UnmarshalJSON(data []byte) error {
type formats FileFormats
switch data[0] {
case 34:
d1 := bytes.ReplaceAll(bytes.Trim(data, `"`), []byte{92, 117, 48, 48, 50, 50}, []byte{34})
d := bytes.ReplaceAll(d1, []byte{92, 34}, []byte{34})
if err := json.Unmarshal(d, (*formats)(f)); err != nil {
return err
}
case 123: // If the "formats" is not an array
d := append([]byte{91}, data...)
if data[len(data)-1] != 93 {
d = append(d, []byte{93}...)
}
if err := json.Unmarshal(d, (*formats)(f)); err != nil {
return err
}
default:
if err := json.Unmarshal(data, (*formats)(f)); err != nil {
return err
}
}
return nil
}
type FileCreators []string
func (c *FileCreators) UnmarshalJSON(data []byte) error {
type creators FileCreators
switch data[0] {
case 34:
d1 := bytes.ReplaceAll(bytes.Trim(data, `"`), []byte{92, 117, 48, 48, 50, 50}, []byte{34})
d := bytes.ReplaceAll(d1, []byte{92, 34}, []byte{34})
if err := json.Unmarshal(d, (*creators)(c)); err != nil {
return err
}
default:
if err := json.Unmarshal(data, (*creators)(c)); err != nil {
return err
}
}
return nil
}
type TokenID struct {
big.Int
}
func (b TokenID) MarshalJSON() ([]byte, error) {
return []byte(b.String()), nil
}
func (b *TokenID) UnmarshalJSON(p []byte) error {
s := string(p)
if s == "null" {
return fmt.Errorf("invalid token id: %s", p)
}
z, ok := big.NewInt(0).SetString(strings.Trim(s, `"`), 0)
if !ok {
return fmt.Errorf("invalid token id: %s", p)
}
b.Int = *z
return nil
}
type Account struct {
Alias string `json:"alias"`
Address string `json:"address"`
}