mirror of
https://gitee.com/XM-GO/PandaX.git
synced 2026-04-23 10:58:35 +08:00
64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
package nodes
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/mitchellh/mapstructure"
|
|
)
|
|
|
|
const (
|
|
NODE_CONFIG_MESSAGE_TYPE_KEY = "messageTypeKey"
|
|
NODE_CONFIG_ORIGINATOR_TYPE_KEY = "originatorTypeKey"
|
|
)
|
|
|
|
type Metadata interface {
|
|
Keys() []string
|
|
With(key string, val interface{}) Metadata
|
|
Value(key string) (interface{}, error)
|
|
DecodePath(rawVal interface{}) error
|
|
}
|
|
|
|
type nodeMetadata struct {
|
|
keypairs map[string]interface{}
|
|
}
|
|
|
|
func NewMetadata() Metadata {
|
|
return &nodeMetadata{
|
|
keypairs: make(map[string]interface{}),
|
|
}
|
|
}
|
|
|
|
func NewMetadataWithString(vals string) Metadata {
|
|
return &nodeMetadata{}
|
|
}
|
|
|
|
func NewMetadataWithValues(vals map[string]interface{}) Metadata {
|
|
return &nodeMetadata{
|
|
keypairs: vals,
|
|
}
|
|
}
|
|
|
|
func (c *nodeMetadata) Keys() []string {
|
|
keys := []string{}
|
|
for key, _ := range c.keypairs {
|
|
keys = append(keys, key)
|
|
}
|
|
return keys
|
|
}
|
|
|
|
func (c *nodeMetadata) Value(key string) (interface{}, error) {
|
|
if val, found := c.keypairs[key]; found {
|
|
return val, nil
|
|
}
|
|
return nil, fmt.Errorf("key '%s' not found", key)
|
|
}
|
|
|
|
func (c *nodeMetadata) With(key string, val interface{}) Metadata {
|
|
c.keypairs[key] = val
|
|
return c
|
|
}
|
|
|
|
func (c *nodeMetadata) DecodePath(rawVal interface{}) error {
|
|
//return utils.Map2Struct(c.keypairs, rawVal)
|
|
return mapstructure.Decode(c.keypairs, rawVal)
|
|
}
|