package manager import ( "fmt" "sync" "github.com/Shugyousha/stasher/filter" "github.com/Shugyousha/stasher/input" "github.com/Shugyousha/stasher/output" "github.com/Shugyousha/stasher/work" ) type Manager struct { Input input.Input Filter filter.Filter Output output.Output } func (m *Manager) Run() { var wg sync.WaitGroup ic := m.Input.Start() for w := range ic { if w.Error() != nil { fmt.Printf("Got an error when getting Work input: %q\n", w.Error()) continue } wg.Add(1) go func(w *work.Work) { defer wg.Done() nw := m.Filter.Filter(w) err := nw.Error() if err != nil { fmt.Printf("Got an error when filtering Work: %q\n", err) return } err = m.Output.Output(nw) if err != nil { fmt.Printf("Got an error when outputting Work: %q\n", err) } }(w) } wg.Wait() }