1
0
forked from um/cli
cli/algo/common/dispatch.go

31 lines
674 B
Go
Raw Normal View History

2020-12-26 07:47:10 +00:00
package common
2021-11-11 15:27:07 +00:00
import (
"path/filepath"
"strings"
)
2020-12-26 07:47:10 +00:00
type NewDecoderFunc func([]byte) Decoder
2021-11-11 15:43:20 +00:00
type decoderItem struct {
noop bool
decoder NewDecoderFunc
}
2021-12-13 20:01:04 +00:00
var DecoderRegistry = make(map[string][]decoderItem)
2020-12-26 07:47:10 +00:00
2021-11-11 15:43:20 +00:00
func RegisterDecoder(ext string, noop bool, dispatchFunc NewDecoderFunc) {
2021-12-13 20:01:04 +00:00
DecoderRegistry[ext] = append(DecoderRegistry[ext],
2021-11-11 15:43:20 +00:00
decoderItem{noop: noop, decoder: dispatchFunc})
2020-12-26 07:47:10 +00:00
}
2021-11-11 15:43:20 +00:00
func GetDecoder(filename string, skipNoop bool) (rs []NewDecoderFunc) {
2021-11-11 15:27:07 +00:00
ext := strings.ToLower(strings.TrimLeft(filepath.Ext(filename), "."))
2021-12-13 20:01:04 +00:00
for _, dec := range DecoderRegistry[ext] {
2021-11-11 15:43:20 +00:00
if skipNoop && dec.noop {
continue
}
rs = append(rs, dec.decoder)
}
return
2020-12-26 07:47:10 +00:00
}