package pkg import ( "regexp" "github.rackspace.com/gorax/tools/util" ) type ( // AddressList : Address List AddressList struct { Name string `json:"name"` Addresses []string `json:"addresses"` Desc string `json:"description"` } // Address : Address list address Address struct { Addr string `json:"address"` Properties AddrProperties `json:"properties,omitempty"` } // AddrProperties : Properties of an AddressList AddrProperties struct { AppService string `json:"app_service,omitempty"` Description string `json:"description,omitempty"` } ) // ParseAddressList : Parses a single AddressList func ParseAddressList(r []string) *AddressList { t := new(AddressList) t.addresses(r[3]) t.Desc = util.RegexpFindString(regexp.MustCompile(`description\s+"(.*?)"\n`), r[0]) return t } // ParseAddressLists : Parse all address lists in to a slice of *AddressList func ParseAddressLists(s string) ([]*AddressList, error) { var a []*AddressList for _, r := range regexp.MustCompile(`(?i)security\s+firewall\s+address-list\s+(\S+)\s+{(.|\n)*?addresses\s+{((.|\n)*?)\n}`).FindAllStringSubmatch(s, -1) { l := new(AddressList) l = ParseAddressList(r) l.Name = r[1] a = append(a, l) } return a, nil } func (a *AddressList) addresses(s string) { for _, r := range regexp.MustCompile(`(\S+)\s+{((.|\n)*?)}`).FindAllStringSubmatch(s, -1) { a.Addresses = append(a.Addresses, r[1]) } }