diff --git a/rpsl-parser/consts.go b/rpsl-parser/consts.go index 0daef04..86aa7d6 100644 --- a/rpsl-parser/consts.go +++ b/rpsl-parser/consts.go @@ -19,7 +19,7 @@ package rpsl type KeyWord int const ( + colon = rune(':') eof = rune(0) octothorpe = rune('#') - colon = rune(':') ) diff --git a/rpsl-parser/coverage.html b/rpsl-parser/coverage.html index cd5c0f4..db64037 100644 --- a/rpsl-parser/coverage.html +++ b/rpsl-parser/coverage.html @@ -54,9 +54,9 @@ @@ -139,173 +139,17 @@ return rppb.Type_UNKNOWN, buf.String() } - switch strings.ToUpper(buf.String()) { - case "ROUTE": - return rppb.Type_ROUTE, buf.String() - case "ROUTE6": - return rppb.Type_ROUTE6, buf.String() - case "AUT-NUM": - return rppb.Type_AUTNUM, buf.String() - case "AS-SET": - return rppb.Type_ASSET, buf.String() - case "ROUTE-SET": - return rppb.Type_ROUTESET, buf.String() - case "MNTNER": - return rppb.Type_MNTNER, buf.String() - case "PERSON": - return rppb.Type_PERSON, buf.String() - case "INETNUM": - return rppb.Type_INETNUM, buf.String() - case "KEY-CERT": - return rppb.Type_KEYCERT, buf.String() - case "ROLE": - return rppb.Type_ROLE, buf.String() - case "INET-RTR": - return rppb.Type_INETRTR, buf.String() - case "INET6NUM": - return rppb.Type_INET6NUM, buf.String() - case "FILTER-SET": - return rppb.Type_FILTERSET, buf.String() - case "RTR-SET": - return rppb.Type_RTRSET, buf.String() - case "PEERING-SET": - return rppb.Type_PEERINGSET, buf.String() - case "ADDRESS": - return rppb.Type_ADDRESS, buf.String() - case "ADMIN-C": - return rppb.Type_ADMINC, buf.String() - case "AGGR-BNDRY": - return rppb.Type_AGGRBNDRY, buf.String() - case "AGGR-MTD": - return rppb.Type_AGGRMTD, buf.String() - case "ALIAS": - return rppb.Type_ALIAS, buf.String() - case "AS-NAME": - return rppb.Type_ASNAME, buf.String() - case "AUTH": - return rppb.Type_AUTH, buf.String() - case "CERTIF": - return rppb.Type_CERTIF, buf.String() - case "CHANGED": - return rppb.Type_CHANGED, buf.String() - case "COMPONENTS": - return rppb.Type_COMPONENTS, buf.String() - case "COUNTRY": - return rppb.Type_COUNTRY, buf.String() - case "DEFAULT": - return rppb.Type_DEFAULT, buf.String() - case "DESCR": - return rppb.Type_DESCR, buf.String() - case "E-MAIL": - return rppb.Type_EMAIL, buf.String() - case "EXPORT": - return rppb.Type_EXPORT, buf.String() - case "EXPORT-COMPS": - return rppb.Type_EXPORTCOMPS, buf.String() - case "EXPORT-VIA": - return rppb.Type_EXPORTVIA, buf.String() - case "FAX-NO": - return rppb.Type_FAXNO, buf.String() - case "FILTER": - return rppb.Type_FILTER, buf.String() - case "FINGERPR": - return rppb.Type_FINGERPR, buf.String() - case "GEOIDX": - return rppb.Type_GEOIDX, buf.String() - case "HOLES": - return rppb.Type_HOLES, buf.String() - case "IFADDR": - return rppb.Type_IFADDR, buf.String() - case "IMPORT": - return rppb.Type_IMPORT, buf.String() - case "IMPORT-VIA": - return rppb.Type_IMPORTVIA, buf.String() - case "INTERFACE": - return rppb.Type_INTERFACE, buf.String() - case "LOCAL-AS": - return rppb.Type_LOCALAS, buf.String() - case "MBRS-BY-REF": - return rppb.Type_MBRSBYREF, buf.String() - case "MEMBER-OF": - return rppb.Type_MEMBEROF, buf.String() - case "MEMBERS": - return rppb.Type_MEMBERS, buf.String() - case "METHOD": - return rppb.Type_METHOD, buf.String() - case "MNT-BY": - return rppb.Type_MNTBY, buf.String() - case "MNT-NFY": - return rppb.Type_MNTNFY, buf.String() - case "MP-EXPORT": - return rppb.Type_MPEXPORT, buf.String() - case "MP-FILTER": - return rppb.Type_MPFILTER, buf.String() - case "MP-IMPORT": - return rppb.Type_MPIMPORT, buf.String() - case "MP-MEMBERS": - return rppb.Type_MPMEMBERS, buf.String() - case "MP-PEER": - return rppb.Type_MPPEER, buf.String() - case "MP-PEERING": - return rppb.Type_MPPEERING, buf.String() - case "NETNAME": - return rppb.Type_NETNAME, buf.String() - case "NIC-HDL": - return rppb.Type_NICHDL, buf.String() - case "NOTIFY": - return rppb.Type_NOTIFY, buf.String() - case "ORIGIN": - return rppb.Type_ORIGIN, buf.String() - case "OWNER": - return rppb.Type_OWNER, buf.String() - case "PEER": - return rppb.Type_PEER, buf.String() - case "PEERING": - return rppb.Type_PEERING, buf.String() - case "PHONE": - return rppb.Type_PHONE, buf.String() - case "REMARKS": - return rppb.Type_REMARKS, buf.String() - case "ROA-URI": - return rppb.Type_ROAURI, buf.String() - case "RS-IN": - return rppb.Type_RSIN, buf.String() - case "RS-OUT": - return rppb.Type_RSOUT, buf.String() - case "SOURCE": - return rppb.Type_SOURCE, buf.String() - case "STATUS": - return rppb.Type_STATUS, buf.String() - case "TECH-C": - return rppb.Type_TECHC, buf.String() - case "TROUBLE": - return rppb.Type_TROUBLE, buf.String() - case "UPD-TO": - return rppb.Type_UPDTO, buf.String() - case "*XXE": - return rppb.Type_XXE, buf.String() - case "*XXNER": - return rppb.Type_XXNER, buf.String() - case "*XX-NUM": - return rppb.Type_XXNUM, buf.String() - case "*XXRING-SET": - return rppb.Type_XXRINGSET, buf.String() - case "*XXSET": - return rppb.Type_XXSET, buf.String() - case "*XXSON": - return rppb.Type_XXSON, buf.String() - case "*XXTE": - return rppb.Type_XXTE, buf.String() - case "*XXTE6": - return rppb.Type_XXTE6, buf.String() - case "*XXTE-SET": - return rppb.Type_XXTESET, buf.String() - default: - // TODO(morrowc): Log this output instead of printing it to the console. - // fmt.Printf("failed to match whatever is in buf currently: %v\n", buf.String()) - return rppb.Type_UNKNOWN, buf.String() - } + key := strings.ToUpper(buf.String()) + ret := buf.String() + // Some RPSL keywords have '-' or '*' in them, the proto enum does not have + // these characters included, remove them from the key comparison. + key = strings.Replace(key, "-", "", -1) + key = strings.Replace(key, "*", "", -1) + if _, ok := rppb.Type_value[key]; !ok { + return rppb.Type_UNKNOWN, ret + } + return rppb.Type(rppb.Type_value[key]), ret } // Each loop through accumulates more in the buffer. _, _ = buf.WriteRune(ch) diff --git a/rpsl-parser/irr.go b/rpsl-parser/irr.go index 08fdb3e..1dda885 100644 --- a/rpsl-parser/irr.go +++ b/rpsl-parser/irr.go @@ -80,173 +80,17 @@ func (r *Reader) findKey() (rppb.Type, string) { return rppb.Type_UNKNOWN, buf.String() } - switch strings.ToUpper(buf.String()) { - case "ROUTE": - return rppb.Type_ROUTE, buf.String() - case "ROUTE6": - return rppb.Type_ROUTE6, buf.String() - case "AUT-NUM": - return rppb.Type_AUTNUM, buf.String() - case "AS-SET": - return rppb.Type_ASSET, buf.String() - case "ROUTE-SET": - return rppb.Type_ROUTESET, buf.String() - case "MNTNER": - return rppb.Type_MNTNER, buf.String() - case "PERSON": - return rppb.Type_PERSON, buf.String() - case "INETNUM": - return rppb.Type_INETNUM, buf.String() - case "KEY-CERT": - return rppb.Type_KEYCERT, buf.String() - case "ROLE": - return rppb.Type_ROLE, buf.String() - case "INET-RTR": - return rppb.Type_INETRTR, buf.String() - case "INET6NUM": - return rppb.Type_INET6NUM, buf.String() - case "FILTER-SET": - return rppb.Type_FILTERSET, buf.String() - case "RTR-SET": - return rppb.Type_RTRSET, buf.String() - case "PEERING-SET": - return rppb.Type_PEERINGSET, buf.String() - case "ADDRESS": - return rppb.Type_ADDRESS, buf.String() - case "ADMIN-C": - return rppb.Type_ADMINC, buf.String() - case "AGGR-BNDRY": - return rppb.Type_AGGRBNDRY, buf.String() - case "AGGR-MTD": - return rppb.Type_AGGRMTD, buf.String() - case "ALIAS": - return rppb.Type_ALIAS, buf.String() - case "AS-NAME": - return rppb.Type_ASNAME, buf.String() - case "AUTH": - return rppb.Type_AUTH, buf.String() - case "CERTIF": - return rppb.Type_CERTIF, buf.String() - case "CHANGED": - return rppb.Type_CHANGED, buf.String() - case "COMPONENTS": - return rppb.Type_COMPONENTS, buf.String() - case "COUNTRY": - return rppb.Type_COUNTRY, buf.String() - case "DEFAULT": - return rppb.Type_DEFAULT, buf.String() - case "DESCR": - return rppb.Type_DESCR, buf.String() - case "E-MAIL": - return rppb.Type_EMAIL, buf.String() - case "EXPORT": - return rppb.Type_EXPORT, buf.String() - case "EXPORT-COMPS": - return rppb.Type_EXPORTCOMPS, buf.String() - case "EXPORT-VIA": - return rppb.Type_EXPORTVIA, buf.String() - case "FAX-NO": - return rppb.Type_FAXNO, buf.String() - case "FILTER": - return rppb.Type_FILTER, buf.String() - case "FINGERPR": - return rppb.Type_FINGERPR, buf.String() - case "GEOIDX": - return rppb.Type_GEOIDX, buf.String() - case "HOLES": - return rppb.Type_HOLES, buf.String() - case "IFADDR": - return rppb.Type_IFADDR, buf.String() - case "IMPORT": - return rppb.Type_IMPORT, buf.String() - case "IMPORT-VIA": - return rppb.Type_IMPORTVIA, buf.String() - case "INTERFACE": - return rppb.Type_INTERFACE, buf.String() - case "LOCAL-AS": - return rppb.Type_LOCALAS, buf.String() - case "MBRS-BY-REF": - return rppb.Type_MBRSBYREF, buf.String() - case "MEMBER-OF": - return rppb.Type_MEMBEROF, buf.String() - case "MEMBERS": - return rppb.Type_MEMBERS, buf.String() - case "METHOD": - return rppb.Type_METHOD, buf.String() - case "MNT-BY": - return rppb.Type_MNTBY, buf.String() - case "MNT-NFY": - return rppb.Type_MNTNFY, buf.String() - case "MP-EXPORT": - return rppb.Type_MPEXPORT, buf.String() - case "MP-FILTER": - return rppb.Type_MPFILTER, buf.String() - case "MP-IMPORT": - return rppb.Type_MPIMPORT, buf.String() - case "MP-MEMBERS": - return rppb.Type_MPMEMBERS, buf.String() - case "MP-PEER": - return rppb.Type_MPPEER, buf.String() - case "MP-PEERING": - return rppb.Type_MPPEERING, buf.String() - case "NETNAME": - return rppb.Type_NETNAME, buf.String() - case "NIC-HDL": - return rppb.Type_NICHDL, buf.String() - case "NOTIFY": - return rppb.Type_NOTIFY, buf.String() - case "ORIGIN": - return rppb.Type_ORIGIN, buf.String() - case "OWNER": - return rppb.Type_OWNER, buf.String() - case "PEER": - return rppb.Type_PEER, buf.String() - case "PEERING": - return rppb.Type_PEERING, buf.String() - case "PHONE": - return rppb.Type_PHONE, buf.String() - case "REMARKS": - return rppb.Type_REMARKS, buf.String() - case "ROA-URI": - return rppb.Type_ROAURI, buf.String() - case "RS-IN": - return rppb.Type_RSIN, buf.String() - case "RS-OUT": - return rppb.Type_RSOUT, buf.String() - case "SOURCE": - return rppb.Type_SOURCE, buf.String() - case "STATUS": - return rppb.Type_STATUS, buf.String() - case "TECH-C": - return rppb.Type_TECHC, buf.String() - case "TROUBLE": - return rppb.Type_TROUBLE, buf.String() - case "UPD-TO": - return rppb.Type_UPDTO, buf.String() - case "*XXE": - return rppb.Type_XXE, buf.String() - case "*XXNER": - return rppb.Type_XXNER, buf.String() - case "*XX-NUM": - return rppb.Type_XXNUM, buf.String() - case "*XXRING-SET": - return rppb.Type_XXRINGSET, buf.String() - case "*XXSET": - return rppb.Type_XXSET, buf.String() - case "*XXSON": - return rppb.Type_XXSON, buf.String() - case "*XXTE": - return rppb.Type_XXTE, buf.String() - case "*XXTE6": - return rppb.Type_XXTE6, buf.String() - case "*XXTE-SET": - return rppb.Type_XXTESET, buf.String() - default: - // TODO(morrowc): Log this output instead of printing it to the console. - // fmt.Printf("failed to match whatever is in buf currently: %v\n", buf.String()) - return rppb.Type_UNKNOWN, buf.String() + key := strings.ToUpper(buf.String()) + ret := buf.String() + // Some RPSL keywords have '-' or '*' in them, the proto enum does not have + // these characters included, remove them from the key comparison. + key = strings.Replace(key, "-", "", -1) + key = strings.Replace(key, "*", "", -1) + + if _, ok := rppb.Type_value[key]; !ok { + return rppb.Type_UNKNOWN, ret } - + return rppb.Type(rppb.Type_value[key]), ret } // Each loop through accumulates more in the buffer. _, _ = buf.WriteRune(ch)