From 4ae52ef993bca643a8d5ed8b0ede6764e9400799 Mon Sep 17 00:00:00 2001 From: lucarin91 Date: Mon, 29 Dec 2025 17:04:35 +0100 Subject: [PATCH] feat: add callbackWriter utility --- io.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 io.go diff --git a/io.go b/io.go new file mode 100644 index 0000000..bfa2c09 --- /dev/null +++ b/io.go @@ -0,0 +1,36 @@ +package f + +import ( + "bytes" +) + +const BufferSize = 1024 + +// CallbackWriter is a custom writer that processes each line calling the callback. +type CallbackWriter struct { + callback func(line string) + buffer []byte +} + +// NewCallbackWriter creates a new CallbackWriter. +func NewCallbackWriter(process func(line string)) *CallbackWriter { + return &CallbackWriter{ + callback: process, + buffer: make([]byte, 0, BufferSize), + } +} + +// Write implements the io.Writer interface. +func (p *CallbackWriter) Write(data []byte) (int, error) { + p.buffer = append(p.buffer, data...) + for { + idx := bytes.IndexByte(p.buffer, '\n') + if idx == -1 { + break + } + line := p.buffer[:idx] // Do not include \n + p.buffer = p.buffer[idx+1:] + p.callback(string(line)) + } + return len(data), nil +}