You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
557 B
25 lines
557 B
package encoding |
|
|
|
import "strings" |
|
|
|
type Codec interface { |
|
Marshal(any) ([]byte, error) |
|
Unmarshal([]byte, any) error |
|
Name() string |
|
} |
|
|
|
var registeredCodecs = make(map[string]Codec) |
|
|
|
func RegisterCodec(codec Codec) { |
|
if codec == nil { |
|
panic("cannot register a nil Codec") |
|
} |
|
if codec.Name() == "" { |
|
panic("cannot register Codec with empty string result for Name()") |
|
} |
|
contentSubType := strings.ToLower(codec.Name()) |
|
registeredCodecs[contentSubType] = codec |
|
} |
|
func GetCodec(contentSubType string) Codec { |
|
return registeredCodecs[contentSubType] |
|
}
|
|
|