package parser import ( "bufio" "io" "net" "strings" ) func init() { domainsParsers = append(domainsParsers, domainsParser{}) } type domainsParser struct{} func (domainsParser) CanHandle(line string) bool { return isDomainName(line) && !strings.ContainsRune(line, ' ') && !strings.ContainsRune(line, ':') && net.ParseIP(line) == nil } func (domainsParser) ParseDomains(r io.Reader) (domains []string, ignored int, err error) { scanner := bufio.NewScanner(r) for scanner.Scan() { line := strings.TrimSpace(scanner.Text()) if isComment(line) { continue } if isDomainName(line) { domains = append(domains, line) continue } ignored++ } if err = scanner.Err(); err != nil { return } return unique(domains), ignored, nil }