api/pkg/audit/writer_sink.go
2021-01-26 18:17:37 +01:00

47 lines
824 B
Go

package audit
type WriterSinkOption func(sink *writerCloserSink)
var (
WithCloseOnExit WriterSinkOption = func(sink *writerCloserSink) {
sink.closeOnExit = true
}
)
func NewWriterSink(name string, target Writer, opts ...WriterSinkOption) Sink {
sink := &writerCloserSink{
name: name,
target: target,
}
for _, opt := range opts {
opt(sink)
}
return sink
}
type writerCloserSink struct {
name string
target Writer
closeOnExit bool
}
type syncer interface {
Sync() error
}
func (f writerCloserSink) Name() string {
return f.name
}
func (f writerCloserSink) OnSubscribe(evs <-chan Event) {
go func(target Writer, closeOnExit bool, evs <-chan Event) {
for ev := range evs {
_ = target.Write(&ev)
}
if closeOnExit {
_ = target.Close()
}
}(f.target, f.closeOnExit, evs)
}