package processor type Processor[TMessage any] struct { queue chan TMessage process func(message TMessage) } func (p *Processor[TMessage]) Work() { for msg := range p.queue { p.process(msg) } } func (p *Processor[TMessage]) Add(msg TMessage) { p.queue <- msg } func NewProcessor[TMessage any](bufferSize int, process func(message TMessage)) *Processor[TMessage] { return &Processor[TMessage]{ queue: make(chan TMessage, bufferSize), process: process, } }