package bus

import (
	"fmt"
)

// Event is used to transport user data over bus.
type Event struct {
	ChannelName string
	Payload     interface{}
}

// eventChannel stores subscriptions for channels.
type eventChannel struct {
	subscribers map[string]chan Event
}

// newEventChannel creates new eventChannel.
func newEventChannel() *eventChannel {
	return &eventChannel{
		subscribers: make(map[string]chan Event),
	}
}

// addSubscriber adds new subscriber.
func (ch *eventChannel) addSubscriber(subName string, size int) error {
	if _, ok := ch.subscribers[subName]; ok {
		return fmt.Errorf("subscriber %s already exists", subName)
	}
	ch.subscribers[subName] = make(chan Event, size)

	return nil
}

// delSubscriber removes subscriber.
func (ch *eventChannel) delSubscriber(subName string) {
	delete(ch.subscribers, subName)
}
