diff --git a/converter/zigbee.go b/converter/zigbee.go index 4bc8b4f..6bee4b7 100644 --- a/converter/zigbee.go +++ b/converter/zigbee.go @@ -47,6 +47,30 @@ func IEEEDecoder(s persistence.Section, k string) (zigbee.IEEEAddress, bool) { } } +func NetworkAddressEncoder(s persistence.Section, k string, v zigbee.NetworkAddress) error { + return s.Set(k, int64(v)) +} + +func NetworkAddressDecoder(s persistence.Section, k string) (zigbee.NetworkAddress, bool) { + if ev, found := s.Int(k); found { + return zigbee.NetworkAddress(ev), true + } else { + return 0, false + } +} + +func LogicalTypeEncoder(s persistence.Section, k string, v zigbee.LogicalType) error { + return s.Set(k, int64(v)) +} + +func LogicalTypeDecoder(s persistence.Section, k string) (zigbee.LogicalType, bool) { + if ev, found := s.Int(k); found { + return zigbee.LogicalType(ev), true + } else { + return 0, false + } +} + func ClusterIDEncoder(s persistence.Section, k string, v zigbee.ClusterID) error { return s.Set(k, int64(v)) } diff --git a/converter/zigbee_test.go b/converter/zigbee_test.go index cc0c9cc..d54d6f2 100644 --- a/converter/zigbee_test.go +++ b/converter/zigbee_test.go @@ -53,6 +53,36 @@ func TestIEEEAddress(t *testing.T) { }) } +func TestNetworkAddress(t *testing.T) { + t.Run("stored and retrieved", func(t *testing.T) { + s := memory.New() + + expected := zigbee.NetworkAddress(0x1122) + + err := Store(s, Key, expected, NetworkAddressEncoder) + assert.NoError(t, err) + + actual, found := Retrieve(s, Key, NetworkAddressDecoder) + assert.True(t, found) + assert.Equal(t, expected, actual) + }) +} + +func TestLogicalType(t *testing.T) { + t.Run("stored and retrieved", func(t *testing.T) { + s := memory.New() + + expected := zigbee.Router + + err := Store(s, Key, expected, LogicalTypeEncoder) + assert.NoError(t, err) + + actual, found := Retrieve(s, Key, LogicalTypeDecoder) + assert.True(t, found) + assert.Equal(t, expected, actual) + }) +} + func TestAttributeID(t *testing.T) { t.Run("stored and retrieved", func(t *testing.T) { s := memory.New()