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  }