diff --git a/models/driver.go b/models/driver.go index c1baa9a..d1fab04 100644 --- a/models/driver.go +++ b/models/driver.go @@ -1,6 +1,8 @@ package models -import "slices" +import ( + "slices" +) // driver model type Driver struct { @@ -46,9 +48,11 @@ func (d *Driver) RemoveBuses(buses []*Bus) { } 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 { diff --git a/models/drivers.go b/models/drivers.go index d017c29..7fe1307 100644 --- a/models/drivers.go +++ b/models/drivers.go @@ -23,6 +23,12 @@ func (d *Drivers) AddDriver(drv *Driver) { func (d *Drivers) RemoveDriver(drv *Driver) { if driver, ok := (*d)[drv.Type]; ok { driver.RemoveBuses(drv.Buses) + if len(driver.Buses) == 1 { + if len(driver.Buses[0].Address) == 0 && driver.Buses[0].Topic == nil { + (*d)[drv.Type] = &Driver{} + return + } + } (*d)[drv.Type] = driver return } diff --git a/models/topic.go b/models/topic.go index 0025186..3b2eb4c 100644 --- a/models/topic.go +++ b/models/topic.go @@ -1,6 +1,8 @@ package models -import "slices" +import ( + "slices" +) // topic model type Topic struct { @@ -33,6 +35,7 @@ func (t *Topic) RemoveSubscription(subs ...string) { t.Subscribe = []string{} return } + for _, toDelete := range subs { for i, a := range t.Subscribe { if a == toDelete {