package models // collection of drivers ordered in map type Drivers map[string]*Driver func (d *Drivers) AddNewDriver(typ string) *Driver { if drv, ok := (*d)[typ]; ok { return drv } drv := &Driver{Type: typ} (*d)[typ] = drv return drv } func (d *Drivers) AddDriver(drv *Driver) { if driver, ok := (*d)[drv.Type]; ok { driver.AddBuses(drv.Buses) return } (*d)[drv.Type] = drv } func (d *Drivers) RemoveDriver(drv *Driver) { if driver, ok := (*d)[drv.Type]; ok { driver.RemoveBuses(drv.Buses) } d.CleanEmptyDrivers() } func (d *Drivers) CleanEmptyDrivers() { for key, drv := range *d { if len(drv.Buses) == 0 { delete(*d, key) } } }