/
self_describing_json.go
58 lines (49 loc) · 1.94 KB
/
self_describing_json.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
//
// Copyright (c) 2016-2023 Snowplow Analytics Ltd. All rights reserved.
//
// This program is licensed to you under the Apache License Version 2.0,
// and you may not use this file except in compliance with the Apache License Version 2.0.
// You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0.
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the Apache License Version 2.0 is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the Apache License Version 2.0 for the specific language governing permissions and limitations there under.
//
package tracker
import (
"github.com/snowplow/snowplow-golang-tracker/v3/pkg/common"
"github.com/snowplow/snowplow-golang-tracker/v3/pkg/payload"
)
type SelfDescribingJson struct {
schema string
data interface{}
}
// InitSelfDescribingJson creates a new SelfDescribingJson object.
func InitSelfDescribingJson(schema string, data interface{}) *SelfDescribingJson {
return &SelfDescribingJson{schema: schema, data: data}
}
// SetDataWithMap updates the structs data to a new map.
func (s *SelfDescribingJson) SetDataWithMap(data map[string]interface{}) {
s.data = data
}
// SetDataWithPayload updates the structs data to the contents of a Payload object.
func (s *SelfDescribingJson) SetDataWithPayload(data payload.Payload) {
s.data = data.Get()
}
// SetDataWithSelfDescribingJson updates the structs data to a JSON.
// Used for nesting SelfDescribingJsons.
func (s *SelfDescribingJson) SetDataWithSelfDescribingJson(data SelfDescribingJson) {
s.data = data.Get()
}
// Get wraps the schema and data into a JSON.
func (s SelfDescribingJson) Get() map[string]interface{} {
return map[string]interface{}{
SCHEMA: s.schema,
DATA: s.data,
}
}
// String returns the JSON as a String.
func (s SelfDescribingJson) String() string {
return common.MapToJson(s.Get())
}