merger_loader.go

 1package jsons
 2
 3import (
 4	"fmt"
 5	"strings"
 6)
 7
 8// RegisterLoader register a new format loader.
 9func (m *Merger) RegisterLoader(name Format, extensions []string, fn LoadFunc) error {
10	if name == FormatAuto {
11		return fmt.Errorf("cannot register with reserved name: '%s'", FormatAuto)
12	}
13	if old, found := m.loadersByName[name]; found {
14		for _, format := range old.Extensions {
15			delete(m.loadersByExt, format)
16		}
17	}
18	loader := newLoader(name, extensions, fn)
19	m.loadersByName[name] = loader
20	for _, ext := range extensions {
21		lext := strings.ToLower(ext)
22		if f, found := m.loadersByExt[lext]; found {
23			return fmt.Errorf("file extension '%s' is already registered to '%s'", ext, f.Name)
24		}
25		m.loadersByExt[lext] = loader
26	}
27	return nil
28}