marshal events experiment
[svn42.git] / go / r3-eventbroker_zmq / marshal_events.go
1 // (c) Bernhard Tittelbach, 2013
2
3 package main
4
5 import (
6     "encoding/json"
7     "fmt"
8     "errors"
9     )
10
11
12 func MarshalEvent(event_interface interface{}) (data [][]byte, err error) {
13     var msg []byte
14     fmt.Printf("%T%+v\n", event_interface, event_interface)
15         msg, err = json.Marshal(event_interface)
16         if err != nil {
17                 return
18         }
19     etype := []byte(fmt.Sprintf("%T", event_interface)[5:])
20     data = [][]byte{etype, msg}
21     return
22 }
23
24 func UnmarshalEvent(data [][]byte) (event interface{}, err error) {
25     switch string(data[0]) {
26         case "DoorLockUpdate":
27             typedevent := new(DoorLockUpdate)
28             err = json.Unmarshal(data[1], typedevent)
29             event = typedevent
30         case "DoorAjarUpdate":
31             typedevent := new(DoorAjarUpdate)
32             err = json.Unmarshal(data[1], typedevent)
33             event = typedevent
34         case "DoorCommandEvent":
35             typedevent := new(DoorCommandEvent)
36             err = json.Unmarshal(data[1], typedevent)
37             event = typedevent
38         default:
39             event = nil
40             err = errors.New("unknown type")
41     }
42     return
43 }