package network

import "reflect"

type TypeAndKey struct {
	Type reflect.Type
	Name string
}

type Tracker interface {
	Add(tk *TypeAndKey)
	Has(tk *TypeAndKey) bool
}

func NewTracker() Tracker {
	return &tracker{
		sets: map[TypeAndKey]struct{}{},
	}
}

type tracker struct {
	sets map[TypeAndKey]struct{}
}

func (t *tracker) Add(tk *TypeAndKey) {
	t.sets[*tk] = struct{}{}
}

func (t *tracker) Has(tk *TypeAndKey) bool {
	if _, ok := t.sets[*tk]; ok {
		return true
	}

	typ := TypeAndKey{
		Type: tk.Type,
	}

	if _, ok := t.sets[typ]; ok {
		return true
	}

	return false
}
