blob: ed8dcf81ee4080d2728d51a2defc06cf7c18b1a3 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package tcp
import (
"github.com/apache/incubator-eventmesh/eventmesh-sdk-go/common/utils"
)
type Header struct {
Cmd Command `json:"cmd"`
Code int `json:"code"`
Desc string `json:"desc"`
Seq string `json:"seq"`
Properties map[string]interface{} `json:"properties"`
}
func (h Header) PutProperty(name string, value interface{}) {
h.Properties[name] = value
}
func (h Header) GetProperty(name string) interface{} {
if h.Properties == nil {
return nil
}
if val, ok := h.Properties[name]; ok {
return val
}
return nil
}
func (h Header) Marshal() []byte {
newHeader := make(map[string]interface{})
newHeader["cmd"] = h.Cmd
// Compatible with Java Enum serialization
newHeader["command"] = h.Cmd
newHeader["code"] = h.Code
newHeader["desc"] = h.Desc
newHeader["seq"] = h.Seq
newHeader["properties"] = h.Properties
return utils.MarshalJsonBytes(newHeader)
}
func (h Header) getVal(key string, headerDict map[string]interface{}) interface{} {
if val, ok := headerDict[key]; ok {
return val
}
return nil
}
func (h Header) Unmarshal(header []byte) Header {
var headerDict map[string]interface{}
utils.UnMarshalJsonBytes(header, &headerDict)
if val := h.getVal("cmd", headerDict); val != nil {
h.Cmd = Command(val.(string))
}
if val := h.getVal("code", headerDict); val != nil {
h.Code = int(val.(float64))
}
if val := h.getVal("desc", headerDict); val != nil {
h.Desc = val.(string)
}
if val := h.getVal("seq", headerDict); val != nil {
h.Seq = val.(string)
}
if val := h.getVal("properties", headerDict); val != nil {
h.Properties = val.(map[string]interface{})
}
return h
}
func NewHeader(cmd Command, code int, desc string, seq string) Header {
return Header{Cmd: cmd, Code: code, Desc: desc, Seq: seq, Properties: map[string]interface{}{}}
}