package rulematcher import ( "context" "net" "github.com/Control-D-Inc/ctrld" ) // RuleType represents the type of rule being matched type RuleType string const ( RuleTypeNetwork RuleType = "network" RuleTypeMac RuleType = "mac" RuleTypeDomain RuleType = "domain" ) // RuleMatcher defines the interface for matching different types of rules type RuleMatcher interface { Match(ctx context.Context, request *MatchRequest) *MatchResult } // MatchRequest contains all the information needed for rule matching type MatchRequest struct { SourceIP net.IP SourceMac string Domain string Policy *ctrld.ListenerPolicyConfig Config *ctrld.Config } // MatchResult represents the result of a rule matching operation type MatchResult struct { Matched bool Targets []string MatchedRule string RuleType RuleType } // MatchingConfig defines the configuration for rule matching behavior type MatchingConfig struct { Order []RuleType `json:"order" yaml:"order"` } // DefaultMatchingConfig returns the default matching configuration // This maintains backward compatibility with the current behavior func DefaultMatchingConfig() *MatchingConfig { return &MatchingConfig{ Order: []RuleType{RuleTypeNetwork, RuleTypeMac, RuleTypeDomain}, } }