-
Notifications
You must be signed in to change notification settings - Fork 13
/
conversationaggregatedatacontainer.go
123 lines (101 loc) · 4 KB
/
conversationaggregatedatacontainer.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
package platformclientv2
import (
"github.com/leekchan/timeutil"
"reflect"
"encoding/json"
"strconv"
"strings"
)
// Conversationaggregatedatacontainer
type Conversationaggregatedatacontainer struct {
// SetFieldNames defines the list of fields to use for controlled JSON serialization
SetFieldNames map[string]bool `json:"-"`
// Group - A mapping from dimension to value
Group *map[string]string `json:"group,omitempty"`
// Data
Data *[]Statisticalresponse `json:"data,omitempty"`
}
// SetField uses reflection to set a field on the model if the model has a property SetFieldNames, and triggers custom JSON serialization logic to only serialize properties that have been set using this function.
func (o *Conversationaggregatedatacontainer) SetField(field string, fieldValue interface{}) {
// Get Value object for field
target := reflect.ValueOf(o)
targetField := reflect.Indirect(target).FieldByName(field)
// Set value
if fieldValue != nil {
targetField.Set(reflect.ValueOf(fieldValue))
} else {
// Must create a new Value (creates **type) then get its element (*type), which will be nil pointer of the appropriate type
x := reflect.Indirect(reflect.New(targetField.Type()))
targetField.Set(x)
}
// Add field to set field names list
if o.SetFieldNames == nil {
o.SetFieldNames = make(map[string]bool)
}
o.SetFieldNames[field] = true
}
func (o Conversationaggregatedatacontainer) MarshalJSON() ([]byte, error) {
// Special processing to dynamically construct object using only field names that have been set using SetField. This generates payloads suitable for use with PATCH API endpoints.
if len(o.SetFieldNames) > 0 {
// Get reflection Value
val := reflect.ValueOf(o)
// Known field names that require type overrides
dateTimeFields := []string{ }
localDateTimeFields := []string{ }
dateFields := []string{ }
// Construct object
newObj := make(map[string]interface{})
for fieldName := range o.SetFieldNames {
// Get initial field value
fieldValue := val.FieldByName(fieldName).Interface()
// Apply value formatting overrides
if fieldValue == nil || reflect.ValueOf(fieldValue).IsNil() {
// Do nothing. Just catching this case to avoid trying to custom serialize a nil value
} else if contains(dateTimeFields, fieldName) {
fieldValue = timeutil.Strftime(toTime(fieldValue), "%Y-%m-%dT%H:%M:%S.%fZ")
} else if contains(localDateTimeFields, fieldName) {
fieldValue = timeutil.Strftime(toTime(fieldValue), "%Y-%m-%dT%H:%M:%S.%f")
} else if contains(dateFields, fieldName) {
fieldValue = timeutil.Strftime(toTime(fieldValue), "%Y-%m-%d")
}
// Assign value to field using JSON tag name
newObj[getFieldName(reflect.TypeOf(&o), fieldName)] = fieldValue
}
// Marshal and return dynamically constructed interface
return json.Marshal(newObj)
}
// Redundant initialization to avoid unused import errors for models with no Time values
_ = timeutil.Timedelta{}
type Alias Conversationaggregatedatacontainer
return json.Marshal(&struct {
Group *map[string]string `json:"group,omitempty"`
Data *[]Statisticalresponse `json:"data,omitempty"`
Alias
}{
Group: o.Group,
Data: o.Data,
Alias: (Alias)(o),
})
}
func (o *Conversationaggregatedatacontainer) UnmarshalJSON(b []byte) error {
var ConversationaggregatedatacontainerMap map[string]interface{}
err := json.Unmarshal(b, &ConversationaggregatedatacontainerMap)
if err != nil {
return err
}
if Group, ok := ConversationaggregatedatacontainerMap["group"].(map[string]interface{}); ok {
GroupString, _ := json.Marshal(Group)
json.Unmarshal(GroupString, &o.Group)
}
if Data, ok := ConversationaggregatedatacontainerMap["data"].([]interface{}); ok {
DataString, _ := json.Marshal(Data)
json.Unmarshal(DataString, &o.Data)
}
return nil
}
// String returns a JSON representation of the model
func (o *Conversationaggregatedatacontainer) String() string {
j, _ := json.Marshal(o)
str, _ := strconv.Unquote(strings.Replace(strconv.Quote(string(j)), `\\u`, `\u`, -1))
return str
}