diff --git a/models/driver.go b/models/driver.go index 89034c0..c1baa9a 100644 --- a/models/driver.go +++ b/models/driver.go @@ -38,34 +38,36 @@ next: } } -func (d *Driver) RemoveBus(bus *Bus) { - for _, currentBus := range d.Buses { - if currentBus.Name != bus.Name { - continue - } +func (d *Driver) RemoveBuses(buses []*Bus) { + for _, bus := range buses { + for _, currentBus := range d.Buses { + if currentBus.Name != bus.Name { + continue + } - currentBus.RemoveAddress(bus.Address...) - if bus.Topic != nil { - currentBus.RemoveSubscription(bus.Topic.Subscribe...) - currentBus.RemovePublish(bus.Topic.Publish...) - if len(currentBus.Address) == 0 { - var remove bool = true - if currentBus.Topic != nil { - remove = len(currentBus.Topic.Subscribe) == 0 && len(currentBus.Topic.Publish) == 0 - } - if remove { - if len(d.Buses) == 1 { - d.Buses = []*Bus{} - return + currentBus.RemoveAddress(bus.Address...) + if bus.Topic != nil { + currentBus.RemoveSubscription(bus.Topic.Subscribe...) + currentBus.RemovePublish(bus.Topic.Publish...) + if len(currentBus.Address) == 0 { + var remove bool = true + if currentBus.Topic != nil { + remove = len(currentBus.Topic.Subscribe) == 0 && len(currentBus.Topic.Publish) == 0 } - for i, b := range d.Buses { - if bus.Name == b.Name { - d.Buses = slices.Delete(d.Buses, i, i+1) + if remove { + if len(d.Buses) == 1 { + d.Buses = []*Bus{} + return + } + for i, b := range d.Buses { + if bus.Name == b.Name { + d.Buses = slices.Delete(d.Buses, i, i+1) + } } } } + break } - break } } } diff --git a/models/drivers.go b/models/drivers.go index 72d98a6..d017c29 100644 --- a/models/drivers.go +++ b/models/drivers.go @@ -19,3 +19,11 @@ func (d *Drivers) AddDriver(drv *Driver) { } (*d)[drv.Type] = drv } + +func (d *Drivers) RemoveDriver(drv *Driver) { + if driver, ok := (*d)[drv.Type]; ok { + driver.RemoveBuses(drv.Buses) + (*d)[drv.Type] = driver + return + } +}