51 lines
775 B
Go
51 lines
775 B
Go
package rules
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
const noResolve = "no-resolve"
|
|
|
|
type Rule struct {
|
|
Type string
|
|
Payload string
|
|
Target string
|
|
}
|
|
|
|
func NewRule(text, name string) *Rule {
|
|
rule := trimArr(strings.Split(text, ","))
|
|
var (
|
|
payload string
|
|
target string
|
|
)
|
|
switch l := len(rule); {
|
|
case l == 2:
|
|
payload = rule[1]
|
|
target = name
|
|
case l == 3:
|
|
payload = rule[1]
|
|
target = rule[2]
|
|
case l >= 4:
|
|
payload = rule[1]
|
|
target = rule[2]
|
|
default:
|
|
return nil
|
|
}
|
|
rule = trimArr(rule)
|
|
return &Rule{
|
|
Type: rule[0],
|
|
Payload: payload,
|
|
Target: target,
|
|
}
|
|
}
|
|
|
|
func (r *Rule) String() string {
|
|
text := r.Type + "," + r.Payload + "," + r.Target
|
|
switch ParseRuleType(r.Type) {
|
|
case IPCIDR, IPSet:
|
|
return text + "," + noResolve
|
|
default:
|
|
return text
|
|
}
|
|
}
|