package core import ( "fmt" "sort" ) func NewVendorsModels() *VendorsModels { return &VendorsModels{VendorsModels: make(map[string][]string)} } type VendorsModels struct { Vendors []string VendorsModels map[string][]string Errs []error } func (o *VendorsModels) AddVendorModels(vendor string, models []string) { o.Vendors = append(o.Vendors, vendor) o.VendorsModels[vendor] = models } func (o *VendorsModels) GetVendorAndModelByModelIndex(modelIndex int) (vendor string, model string) { vendorModelIndexFrom := 0 vendorModelIndexTo := 0 for _, currenVendor := range o.Vendors { vendorModelIndexFrom = vendorModelIndexTo + 1 vendorModelIndexTo = vendorModelIndexFrom + len(o.VendorsModels[currenVendor]) - 1 if modelIndex >= vendorModelIndexFrom && modelIndex <= vendorModelIndexTo { vendor = currenVendor model = o.VendorsModels[currenVendor][modelIndex-vendorModelIndexFrom] break } } return } func (o *VendorsModels) AddError(err error) { o.Errs = append(o.Errs, err) } func (o *VendorsModels) Print() { fmt.Printf("\nAvailable vendor models:\n") sort.Strings(o.Vendors) var currentModelIndex int for _, vendor := range o.Vendors { fmt.Println() fmt.Printf("%s\n", vendor) fmt.Println() currentModelIndex = o.PrintVendor(vendor, currentModelIndex) } return } func (o *VendorsModels) PrintVendor(vendor string, modelIndex int) (currentModelIndex int) { currentModelIndex = modelIndex models := o.VendorsModels[vendor] for _, model := range models { currentModelIndex++ fmt.Printf("\t[%d]\t%s\n", currentModelIndex, model) } fmt.Println() return } func (o *VendorsModels) GetVendorModels(vendor string) (models []string) { models = o.VendorsModels[vendor] return } func (o *VendorsModels) HasVendor(vendor string) (ret bool) { ret = o.VendorsModels[vendor] != nil return } func (o *VendorsModels) FindVendorsByModelFirst(model string) (ret string) { vendors := o.FindVendorsByModel(model) if len(vendors) > 0 { ret = vendors[0] } return } func (o *VendorsModels) FindVendorsByModel(model string) (vendors []string) { for vendor, models := range o.VendorsModels { for _, m := range models { if m == model { vendors = append(vendors, vendor) continue } } } return }