dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts@v1.0.2/dtos/requests/deviceresource.go (about)

     1  //
     2  // Copyright (C) 2022 IOTech Ltd
     3  //
     4  // SPDX-License-Identifier: Apache-2.0
     5  
     6  package requests
     7  
     8  import (
     9  	"encoding/json"
    10  
    11  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/common"
    12  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos"
    13  	dtoCommon "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/common"
    14  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/errors"
    15  	"dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/models"
    16  )
    17  
    18  // AddDeviceResourceRequest defines the Request Content for POST DeviceResource DTO.
    19  type AddDeviceResourceRequest struct {
    20  	dtoCommon.BaseRequest `json:",inline"`
    21  	ProfileName           string              `json:"profileName" validate:"required,edgex-dto-none-empty-string"`
    22  	Resource              dtos.DeviceResource `json:"resource"`
    23  }
    24  
    25  func (request AddDeviceResourceRequest) Validate() error {
    26  	err := common.Validate(request)
    27  	return err
    28  }
    29  
    30  // UnmarshalJSON implements the Unmarshaler interface for the AddDeviceResourceReques type
    31  func (dr *AddDeviceResourceRequest) UnmarshalJSON(b []byte) error {
    32  	alias := struct {
    33  		dtoCommon.BaseRequest
    34  		ProfileName string
    35  		Resource    dtos.DeviceResource
    36  	}{}
    37  
    38  	if err := json.Unmarshal(b, &alias); err != nil {
    39  		return errors.NewCommonEdgeX(errors.KindContractInvalid, "Failed to unmarshal request body as JSON.", err)
    40  	}
    41  	*dr = AddDeviceResourceRequest(alias)
    42  
    43  	if err := dr.Validate(); err != nil {
    44  		return err
    45  	}
    46  
    47  	return nil
    48  }
    49  
    50  // UpdateDeviceResourceRequest defines the Request Content for PATCH DeviceResource DTO.
    51  type UpdateDeviceResourceRequest struct {
    52  	dtoCommon.BaseRequest `json:",inline"`
    53  	ProfileName           string                    `json:"profileName" validate:"required,edgex-dto-none-empty-string"`
    54  	Resource              dtos.UpdateDeviceResource `json:"resource"`
    55  }
    56  
    57  func (request UpdateDeviceResourceRequest) Validate() error {
    58  	err := common.Validate(request)
    59  	return err
    60  }
    61  
    62  // UnmarshalJSON implements the Unmarshaler interface for the UpdateDeviceResourceRequest type
    63  func (dr *UpdateDeviceResourceRequest) UnmarshalJSON(b []byte) error {
    64  	alias := struct {
    65  		dtoCommon.BaseRequest
    66  		ProfileName string
    67  		Resource    dtos.UpdateDeviceResource
    68  	}{}
    69  
    70  	if err := json.Unmarshal(b, &alias); err != nil {
    71  		return errors.NewCommonEdgeX(errors.KindContractInvalid, "Failed to unmarshal request body as JSON.", err)
    72  	}
    73  	*dr = UpdateDeviceResourceRequest(alias)
    74  
    75  	if err := dr.Validate(); err != nil {
    76  		return err
    77  	}
    78  
    79  	return nil
    80  }
    81  
    82  // ReplaceDeviceResourceModelFieldsWithDTO replace existing DeviceResource's fields with DTO patch
    83  func ReplaceDeviceResourceModelFieldsWithDTO(dr *models.DeviceResource, patch dtos.UpdateDeviceResource) {
    84  	if patch.Description != nil {
    85  		dr.Description = *patch.Description
    86  	}
    87  	if patch.IsHidden != nil {
    88  		dr.IsHidden = *patch.IsHidden
    89  	}
    90  }