func (sv *standardValues) Deserialize(key string, value []byte) (proto.Message, error) {
	msg, ok := sv.lookup[key]
	if !ok {
		return nil, fmt.Errorf("Unexpected key %s", key)
	}
	err := proto.Unmarshal(value, msg)
	if err != nil {
		return nil, err
	}
	return msg, nil
}
Deserialize looks up the backing Values proto of the given name, unmarshals the given bytes
to populate the backing message structure, and returns a referenced to the retained deserialized
message (or an error, either because the key did not exist, or there was an an error unmarshaling
package config
import (
	"fmt"
	"reflect"
	"github.com/golang/protobuf/proto"
)
type standardValues struct {
	lookup map[string]proto.Message
}
func NewStandardValues(protosStructs ...interface{}) (*standardValues, error) {
	sv := &standardValues{
		lookup: make(map[string]proto.Message),
	}
	for _, protosStruct := range protosStructs {
		logger.Debugf("Initializing protos for %T\n", protosStruct)
		if err := sv.initializeProtosStruct(reflect.ValueOf(protosStruct)); err != nil {
			return nil, err
		}
	}
	return sv, nil
}