-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfigure.go
More file actions
89 lines (77 loc) · 1.88 KB
/
configure.go
File metadata and controls
89 lines (77 loc) · 1.88 KB
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
package glsensor
import (
"encoding/json"
"io"
"github.com/dipoll/glsensor/destinations"
"github.com/dipoll/glsensor/sensors"
)
// SensorConf structure is configuration object to be read from json
type SensorConf struct {
Sensor sensors.Measurer
}
// DestinationConf represents configuration data handler
// for destinations
type DestinationConf struct {
Destination destinations.Sender
}
// UnmarshalJSON does reading of json structure by
// applying particular type of the sensor's handler
func (s *SensorConf) UnmarshalJSON(data []byte) error {
type Sens struct {
Type string `json:"Type,omitempty"`
}
var _type Sens
err := json.Unmarshal(data, &_type)
if err != nil {
return err
}
cfg, err := sensors.GetSensorByName(_type.Type)
if err != nil {
return err
}
err = json.Unmarshal(data, &cfg)
if err != nil {
return err
}
s.Sensor = cfg
return nil
}
// UnmarshalJSON does reading of json structure by
// applying particular type of the sensor's handler
func (d *DestinationConf) UnmarshalJSON(data []byte) error {
type SenderInstance struct {
Type string `json:"Type,omitempty"`
}
var _type SenderInstance
err := json.Unmarshal(data, &_type)
if err != nil {
return err
}
cfg, err := destinations.GetSenderByName(_type.Type)
if err != nil {
return err
}
err = json.Unmarshal(data, &cfg)
if err != nil {
return err
}
d.Destination = cfg
return nil
}
// DeviceConf structure is configuration object to be read from json
// Is a placehoslder for full configuration
type DeviceConf struct {
Name string
Location string
Region string
Sensors []SensorConf
Destinations []DestinationConf
}
// ReadConfiguration reads full configuration from json string
// and returns initialized SensorConf
func ReadConfiguration(r io.Reader) (DeviceConf, error) {
var dc DeviceConf
dec := json.NewDecoder(r)
err := dec.Decode(&dc)
return dc, err
}