dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts@v1.0.2/dtos/responses/event.go (about) 1 // 2 // Copyright (C) 2020 IOTech Ltd 3 // 4 // SPDX-License-Identifier: Apache-2.0 5 6 package responses 7 8 import ( 9 "encoding/json" 10 "os" 11 12 "github.com/fxamacker/cbor/v2" 13 14 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/common" 15 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos" 16 dtoCommon "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/common" 17 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/errors" 18 ) 19 20 // EventResponse defines the Response Content for GET event DTOs. 21 type EventResponse struct { 22 dtoCommon.BaseResponse `json:",inline"` 23 Event dtos.Event `json:"event"` 24 } 25 26 // MultiEventsResponse defines the Response Content for GET multiple event DTOs. 27 type MultiEventsResponse struct { 28 dtoCommon.BaseWithTotalCountResponse `json:",inline"` 29 Events []dtos.Event `json:"events"` 30 } 31 32 func NewEventResponse(requestId string, message string, statusCode int, event dtos.Event) EventResponse { 33 return EventResponse{ 34 BaseResponse: dtoCommon.NewBaseResponse(requestId, message, statusCode), 35 Event: event, 36 } 37 } 38 39 func NewMultiEventsResponse(requestId string, message string, statusCode int, totalCount uint32, events []dtos.Event) MultiEventsResponse { 40 return MultiEventsResponse{ 41 BaseWithTotalCountResponse: dtoCommon.NewBaseWithTotalCountResponse(requestId, message, statusCode, totalCount), 42 Events: events, 43 } 44 } 45 46 func (e *EventResponse) Encode() ([]byte, string, error) { 47 var encoding = common.ContentTypeJSON 48 49 for _, r := range e.Event.Readings { 50 if r.ValueType == common.ValueTypeBinary { 51 encoding = common.ContentTypeCBOR 52 break 53 } 54 } 55 if v := os.Getenv(common.EnvEncodeAllEvents); v == common.ValueTrue { 56 encoding = common.ContentTypeCBOR 57 } 58 59 var err error 60 var encodedData []byte 61 switch encoding { 62 case common.ContentTypeCBOR: 63 encodedData, err = cbor.Marshal(e) 64 if err != nil { 65 return nil, "", errors.NewCommonEdgeX(errors.KindContractInvalid, "failed to encode EventResponse to CBOR", err) 66 } 67 case common.ContentTypeJSON: 68 encodedData, err = json.Marshal(e) 69 if err != nil { 70 return nil, "", errors.NewCommonEdgeX(errors.KindContractInvalid, "failed to encode EventResponse to JSON", err) 71 } 72 } 73 74 return encodedData, encoding, nil 75 }