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}