| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package dto
- import (
- "encoding/json"
- "strconv"
- )
- type StringValue string
- func (s *StringValue) UnmarshalJSON(data []byte) error {
- var str string
- if err := json.Unmarshal(data, &str); err == nil {
- *s = StringValue(str)
- return nil
- }
- var raw json.Number
- if err := json.Unmarshal(data, &raw); err == nil {
- *s = StringValue(raw.String())
- return nil
- }
- return json.Unmarshal(data, &str)
- }
- func (s StringValue) MarshalJSON() ([]byte, error) {
- return json.Marshal(string(s))
- }
- type IntValue int
- func (i *IntValue) UnmarshalJSON(b []byte) error {
- var n int
- if err := json.Unmarshal(b, &n); err == nil {
- *i = IntValue(n)
- return nil
- }
- var s string
- if err := json.Unmarshal(b, &s); err != nil {
- return err
- }
- v, err := strconv.Atoi(s)
- if err != nil {
- return err
- }
- *i = IntValue(v)
- return nil
- }
- func (i IntValue) MarshalJSON() ([]byte, error) {
- return json.Marshal(int(i))
- }
- type BoolValue bool
- func (b *BoolValue) UnmarshalJSON(data []byte) error {
- var boolean bool
- if err := json.Unmarshal(data, &boolean); err == nil {
- *b = BoolValue(boolean)
- return nil
- }
- var str string
- if err := json.Unmarshal(data, &str); err != nil {
- return err
- }
- if str == "true" {
- *b = BoolValue(true)
- } else if str == "false" {
- *b = BoolValue(false)
- } else {
- return json.Unmarshal(data, &boolean)
- }
- return nil
- }
- func (b BoolValue) MarshalJSON() ([]byte, error) {
- return json.Marshal(bool(b))
- }
|