package asaModels import "regexp" var accessGroupRE = regexp.MustCompile(`(?i)access-group\s+(\S+)\s+(\S+)\s+interface\s+(\S+)`) type ( AccessGroups struct { AccessGroups []*AccessGroup `json:"access_group"` } AccessGroup struct { IfName string `json:"if_name"` Direction string `json:"direction"` AccessList string `json:"access_list"` } ) func ParseAccessGroups(s string) AccessGroups { var a AccessGroups a.Parse(s) return a } func (a *AccessGroups) Parse(s string) { for _, v := range accessGroupRE.FindAllStringSubmatch(s, -1) { a.AccessGroups = append(a.AccessGroups, &AccessGroup{ IfName: v[3], Direction: v[2], AccessList: v[1], }) } } func (a *AccessGroups) ACLInUse(acl string) bool { return ACLInUse(acl, a.AccessGroups) } func ACLInUse(acl string, ag []*AccessGroup) bool { for _, ag := range ag { if ag.AccessList == acl { return true } } return false } func (a *AccessGroups) FindACL(acl string) (matches []*AccessGroup) { return FindACL(acl, a.AccessGroups) } func FindACL(acl string, ag []*AccessGroup) (matches []*AccessGroup) { for _, ag := range ag { if ag.AccessList == acl { matches = append(matches, ag) } } return } func (a *AccessGroups) FindIfName(ifName string) *AccessGroup { return FindIfName(ifName, a.AccessGroups) } func FindIfName(ifName string, ag []*AccessGroup) *AccessGroup { for _, ag := range ag { if ag.IfName == ifName { return ag } } return nil } func FindAccessGroup(IfName string, ags []*AccessGroup) *string { for _, ag := range ags { if ag.IfName == IfName { return &ag.AccessList } } return nil }