| package dto |
|
|
| import ( |
| "encoding/json" |
| "strconv" |
| ) |
|
|
| 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)) |
| } |
|
|