github.com/kelleygo/clashcore@v1.0.2/component/geodata/memconservative/memc.go (about)

     1  package memconservative
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"runtime"
     7  
     8  	"github.com/kelleygo/clashcore/component/geodata"
     9  	"github.com/kelleygo/clashcore/component/geodata/router"
    10  )
    11  
    12  type memConservativeLoader struct {
    13  	geoipcache   GeoIPCache
    14  	geositecache GeoSiteCache
    15  }
    16  
    17  func (m *memConservativeLoader) LoadIPByPath(filename, country string) ([]*router.CIDR, error) {
    18  	defer runtime.GC()
    19  	geoip, err := m.geoipcache.Unmarshal(filename, country)
    20  	if err != nil {
    21  		return nil, fmt.Errorf("failed to decode geodata file: %s, base error: %s", filename, err.Error())
    22  	}
    23  	return geoip.Cidr, nil
    24  }
    25  
    26  func (m *memConservativeLoader) LoadIPByBytes(geoipBytes []byte, country string) ([]*router.CIDR, error) {
    27  	return nil, errors.New("memConservative do not support LoadIPByBytes")
    28  }
    29  
    30  func (m *memConservativeLoader) LoadSiteByPath(filename, list string) ([]*router.Domain, error) {
    31  	defer runtime.GC()
    32  	geosite, err := m.geositecache.Unmarshal(filename, list)
    33  	if err != nil {
    34  		return nil, fmt.Errorf("failed to decode geodata file: %s, base error: %s", filename, err.Error())
    35  	}
    36  	return geosite.Domain, nil
    37  }
    38  
    39  func (m *memConservativeLoader) LoadSiteByBytes(geositeBytes []byte, list string) ([]*router.Domain, error) {
    40  	return nil, errors.New("memConservative do not support LoadSiteByBytes")
    41  }
    42  
    43  func newMemConservativeLoader() geodata.LoaderImplementation {
    44  	return &memConservativeLoader{make(map[string]*router.GeoIP), make(map[string]*router.GeoSite)}
    45  }
    46  
    47  func init() {
    48  	geodata.RegisterGeoDataLoaderImplementationCreator("memconservative", newMemConservativeLoader)
    49  }