github.com/kelleygo/clashcore@v1.0.2/component/geodata/geodata.go (about) 1 package geodata 2 3 import ( 4 "fmt" 5 6 "github.com/kelleygo/clashcore/component/geodata/router" 7 C "github.com/kelleygo/clashcore/constant" 8 ) 9 10 type loader struct { 11 LoaderImplementation 12 } 13 14 func (l *loader) LoadGeoSite(list string) ([]*router.Domain, error) { 15 return l.LoadSiteByPath(C.GeositeName, list) 16 } 17 18 func (l *loader) LoadGeoIP(country string) ([]*router.CIDR, error) { 19 return l.LoadIPByPath(C.GeoipName, country) 20 } 21 22 var loaders map[string]func() LoaderImplementation 23 24 func RegisterGeoDataLoaderImplementationCreator(name string, loader func() LoaderImplementation) { 25 if loaders == nil { 26 loaders = map[string]func() LoaderImplementation{} 27 } 28 loaders[name] = loader 29 } 30 31 func getGeoDataLoaderImplementation(name string) (LoaderImplementation, error) { 32 if geoLoader, ok := loaders[name]; ok { 33 return geoLoader(), nil 34 } 35 return nil, fmt.Errorf("unable to locate GeoData loader %s", name) 36 } 37 38 func GetGeoDataLoader(name string) (Loader, error) { 39 loadImpl, err := getGeoDataLoaderImplementation(name) 40 if err == nil { 41 return &loader{loadImpl}, nil 42 } 43 return nil, err 44 }