// (c) Bernhard Tittelbach, 2013 package main import ( "encoding/json" "fmt" "errors" ) func MarshalEvent(event_interface interface{}) (data [][]byte, err error) { var msg []byte fmt.Printf("%T%+v\n", event_interface, event_interface) msg, err = json.Marshal(event_interface) if err != nil { return } etype := []byte(fmt.Sprintf("%T", event_interface)[5:]) data = [][]byte{etype, msg} return } func UnmarshalEvent(data [][]byte) (event interface{}, err error) { switch string(data[0]) { case "DoorLockUpdate": typedevent := new(DoorLockUpdate) err = json.Unmarshal(data[1], typedevent) event = typedevent case "DoorAjarUpdate": typedevent := new(DoorAjarUpdate) err = json.Unmarshal(data[1], typedevent) event = typedevent case "DoorCommandEvent": typedevent := new(DoorCommandEvent) err = json.Unmarshal(data[1], typedevent) event = typedevent default: event = nil err = errors.New("unknown type") } return }