mirror of https://github.com/containers/podman.git
35 lines
821 B
Go
35 lines
821 B
Go
package channelwriter
|
|
|
|
import "github.com/pkg/errors"
|
|
|
|
// Writer is an io.writer-like object that "writes" to a channel
|
|
// instead of a buffer or file, etc. It is handy for varlink endpoints when
|
|
// needing to handle endpoints that do logging "real-time"
|
|
type Writer struct {
|
|
ByteChannel chan []byte
|
|
}
|
|
|
|
// NewChannelWriter creates a new channel writer and adds a
|
|
// byte slice channel into it.
|
|
func NewChannelWriter() *Writer {
|
|
byteChannel := make(chan []byte)
|
|
return &Writer{
|
|
ByteChannel: byteChannel,
|
|
}
|
|
}
|
|
|
|
// Write method for Writer
|
|
func (c *Writer) Write(w []byte) (int, error) {
|
|
if c.ByteChannel == nil {
|
|
return 0, errors.New("channel writer channel cannot be nil")
|
|
}
|
|
c.ByteChannel <- w
|
|
return len(w), nil
|
|
}
|
|
|
|
// Close method for Writer
|
|
func (c *Writer) Close() error {
|
|
close(c.ByteChannel)
|
|
return nil
|
|
}
|