diff --git a/message-handler.go b/message-handler.go index 92f672f..87a2dac 100644 --- a/message-handler.go +++ b/message-handler.go @@ -219,3 +219,34 @@ func (h *RemoveDeliveryHandler) Is(m *Message) bool { _, ok := m.Content.(*messages.RemoveDelivery) return ok } + +type CheckoutHandler struct { + TypedMessageHandler +} + +func (h *CheckoutHandler) Write(m *Message, w io.Writer) error { + messageBytes, err := proto.Marshal(m.Content.(*messages.CreateCheckoutOrder)) + if err != nil { + return err + } + w.Write(messageBytes) + return nil +} + +func (h *CheckoutHandler) Read(data []byte) (interface{}, error) { + msg := &messages.CreateCheckoutOrder{} + + err := proto.Unmarshal(data, msg) + if err != nil { + return nil, err + } + return msg, nil +} + +func (h *CheckoutHandler) Is(m *Message) bool { + if m.Type != CreateCheckoutOrderType { + return false + } + _, ok := m.Content.(*messages.CreateCheckoutOrder) + return ok +}