-
Notifications
You must be signed in to change notification settings - Fork 68
/
provisionwatcher.go
132 lines (115 loc) · 4.28 KB
/
provisionwatcher.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
124
125
126
127
128
129
130
131
132
//
// Copyright (C) 2021-2023 IOTech Ltd
//
// SPDX-License-Identifier: Apache-2.0
package requests
import (
"encoding/json"
"github.com/edgexfoundry/go-mod-core-contracts/v3/common"
"github.com/edgexfoundry/go-mod-core-contracts/v3/dtos"
dtoCommon "github.com/edgexfoundry/go-mod-core-contracts/v3/dtos/common"
"github.com/edgexfoundry/go-mod-core-contracts/v3/errors"
"github.com/edgexfoundry/go-mod-core-contracts/v3/models"
)
// AddProvisionWatcherRequest defines the Request Content for POST ProvisionWatcher DTO.
type AddProvisionWatcherRequest struct {
dtoCommon.BaseRequest `json:",inline"`
ProvisionWatcher dtos.ProvisionWatcher `json:"provisionWatcher"`
}
// Validate satisfies the Validator interface
func (pw *AddProvisionWatcherRequest) Validate() error {
err := common.Validate(pw)
return err
}
// UnmarshalJSON implements the Unmarshaler interface for the AddProvisionWatcherRequest type
func (pw *AddProvisionWatcherRequest) UnmarshalJSON(b []byte) error {
var alias struct {
dtoCommon.BaseRequest
ProvisionWatcher dtos.ProvisionWatcher
}
if err := json.Unmarshal(b, &alias); err != nil {
return errors.NewCommonEdgeX(errors.KindContractInvalid, "Failed to unmarshal request body as JSON.", err)
}
*pw = AddProvisionWatcherRequest(alias)
// validate AddDeviceRequest DTO
if err := pw.Validate(); err != nil {
return err
}
return nil
}
// AddProvisionWatcherReqToProvisionWatcherModels transforms the AddProvisionWatcherRequest DTO array to the ProvisionWatcher model array
func AddProvisionWatcherReqToProvisionWatcherModels(addRequests []AddProvisionWatcherRequest) (ProvisionWatchers []models.ProvisionWatcher) {
for _, req := range addRequests {
d := dtos.ToProvisionWatcherModel(req.ProvisionWatcher)
ProvisionWatchers = append(ProvisionWatchers, d)
}
return ProvisionWatchers
}
// UpdateProvisionWatcherRequest defines the Request Content for PUT event as pushed DTO.
type UpdateProvisionWatcherRequest struct {
dtoCommon.BaseRequest `json:",inline"`
ProvisionWatcher dtos.UpdateProvisionWatcher `json:"provisionWatcher"`
}
// Validate satisfies the Validator interface
func (pw *UpdateProvisionWatcherRequest) Validate() error {
err := common.Validate(pw)
return err
}
// UnmarshalJSON implements the Unmarshaler interface for the UpdateProvisionWatcherRequest type
func (pw *UpdateProvisionWatcherRequest) UnmarshalJSON(b []byte) error {
var alias struct {
dtoCommon.BaseRequest
ProvisionWatcher dtos.UpdateProvisionWatcher
}
if err := json.Unmarshal(b, &alias); err != nil {
return errors.NewCommonEdgeX(errors.KindContractInvalid, "Failed to unmarshal request body as JSON.", err)
}
*pw = UpdateProvisionWatcherRequest(alias)
// validate UpdateDeviceRequest DTO
if err := pw.Validate(); err != nil {
return err
}
return nil
}
// ReplaceProvisionWatcherModelFieldsWithDTO replace existing ProvisionWatcher's fields with DTO patch
func ReplaceProvisionWatcherModelFieldsWithDTO(pw *models.ProvisionWatcher, patch dtos.UpdateProvisionWatcher) {
if patch.Labels != nil {
pw.Labels = patch.Labels
}
if patch.Identifiers != nil {
pw.Identifiers = patch.Identifiers
}
if patch.BlockingIdentifiers != nil {
pw.BlockingIdentifiers = patch.BlockingIdentifiers
}
if patch.AdminState != nil {
pw.AdminState = models.AdminState(*patch.AdminState)
}
if patch.DiscoveredDevice.ProfileName != nil {
pw.DiscoveredDevice.ProfileName = *patch.DiscoveredDevice.ProfileName
}
if patch.ServiceName != nil {
pw.ServiceName = *patch.ServiceName
}
if patch.DiscoveredDevice.AdminState != nil {
pw.DiscoveredDevice.AdminState = models.AdminState(*patch.DiscoveredDevice.AdminState)
}
if patch.DiscoveredDevice.AutoEvents != nil {
pw.DiscoveredDevice.AutoEvents = dtos.ToAutoEventModels(patch.DiscoveredDevice.AutoEvents)
}
if patch.DiscoveredDevice.Properties != nil {
pw.DiscoveredDevice.Properties = patch.DiscoveredDevice.Properties
}
}
func NewAddProvisionWatcherRequest(dto dtos.ProvisionWatcher) AddProvisionWatcherRequest {
return AddProvisionWatcherRequest{
BaseRequest: dtoCommon.NewBaseRequest(),
ProvisionWatcher: dto,
}
}
func NewUpdateProvisionWatcherRequest(dto dtos.UpdateProvisionWatcher) UpdateProvisionWatcherRequest {
return UpdateProvisionWatcherRequest{
BaseRequest: dtoCommon.NewBaseRequest(),
ProvisionWatcher: dto,
}
}