package parser import ( "bufio" "io" "net/netip" "strings" "git.maze.io/maze/styx/internal/sliceutil" ) func init() { RegisterNetworksParser(mikroTikNetworksParser{}) } type mikroTikNetworksParser struct{} func (mikroTikNetworksParser) CanHandle(line string) bool { return line == "/ip firewall address-list" || strings.HasPrefix(line, "add address=") } func (mikroTikNetworksParser) ParseNetworks(r io.Reader) (prefixes []netip.Prefix, ignored int, err error) { scanner := bufio.NewScanner(r) for scanner.Scan() { line := strings.TrimSpace(scanner.Text()) if isComment(line) || line == "/ip firewall address-list" { continue } if strings.HasPrefix(line, "add address=") { part := strings.Fields(line[12:]) if prefix, err := netip.ParsePrefix(part[0]); err == nil { prefixes = append(prefixes, prefix) continue } } ignored++ } if err = scanner.Err(); err != nil { return } return sliceutil.Unique(prefixes), ignored, nil }