github.com/kelleygo/clashcore@v1.0.2/rules/provider/rule_set.go (about) 1 package provider 2 3 import ( 4 "fmt" 5 C "github.com/kelleygo/clashcore/constant" 6 P "github.com/kelleygo/clashcore/constant/provider" 7 "github.com/kelleygo/clashcore/rules/common" 8 ) 9 10 type RuleSet struct { 11 *common.Base 12 ruleProviderName string 13 adapter string 14 ruleProvider P.RuleProvider 15 noResolveIP bool 16 shouldFindProcess bool 17 } 18 19 func (rs *RuleSet) ShouldFindProcess() bool { 20 return rs.shouldFindProcess || rs.getProviders().ShouldFindProcess() 21 } 22 23 func (rs *RuleSet) RuleType() C.RuleType { 24 return C.RuleSet 25 } 26 27 func (rs *RuleSet) Match(metadata *C.Metadata) (bool, string) { 28 return rs.getProviders().Match(metadata), rs.adapter 29 } 30 31 func (rs *RuleSet) Adapter() string { 32 return rs.adapter 33 } 34 35 func (rs *RuleSet) Payload() string { 36 return rs.getProviders().Name() 37 } 38 39 func (rs *RuleSet) ShouldResolveIP() bool { 40 return !rs.noResolveIP && rs.getProviders().ShouldResolveIP() 41 } 42 func (rs *RuleSet) getProviders() P.RuleProvider { 43 if rs.ruleProvider == nil { 44 rp := RuleProviders()[rs.ruleProviderName] 45 rs.ruleProvider = rp 46 } 47 48 return rs.ruleProvider 49 } 50 51 func NewRuleSet(ruleProviderName string, adapter string, noResolveIP bool) (*RuleSet, error) { 52 rp, ok := RuleProviders()[ruleProviderName] 53 if !ok { 54 return nil, fmt.Errorf("rule set %s not found", ruleProviderName) 55 } 56 return &RuleSet{ 57 Base: &common.Base{}, 58 ruleProviderName: ruleProviderName, 59 adapter: adapter, 60 ruleProvider: rp, 61 noResolveIP: noResolveIP, 62 }, nil 63 }