package pkg import ( "github.rackspace.com/gorax/tools/util" "regexp" ) type ( PortLists struct { PortList []*PortList `json:"port-list"` } PortList struct { Name *string `json:"name"` Ports *[]*Port `json:"ports"` Desc *string `json:"description"` } Port struct { Port *string `json:"port"` Properties *string `json:"properties"` } ) func (p *PortLists) Parse(s string) { for _, r := range regexp.MustCompile(`(?i)security\s+firewall\s+port-list\s+(\S+)\s+{(.|\n)*?ports\s+{((.|\n)*?)\n}`).FindAllStringSubmatch(s, -1) { desc := util.RegexpFindString(regexp.MustCompile(`description\s+(.*?)\r\n`), r[0]) p.PortList = append(p.PortList, &PortList{ Name: &r[1], Ports: p.ports(r[3]), Desc: &desc, }) } } func (p *PortLists) ports(s string) *[]*Port { var l []*Port for _, r := range regexp.MustCompile(`(\S+)\s+\{((.|\n)*?)}`).FindAllStringSubmatch(s, -1) { l = append(l, &Port{ Port: &r[1], }) } return &l }