1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- package streamformatter
- import (
- "encoding/json"
- "io"
- "github.com/docker/docker/pkg/jsonmessage"
- )
- type streamWriter struct {
- io.Writer
- lineFormat func([]byte) string
- }
- func (sw *streamWriter) Write(buf []byte) (int, error) {
- formattedBuf := sw.format(buf)
- n, err := sw.Writer.Write(formattedBuf)
- if n != len(formattedBuf) {
- return n, io.ErrShortWrite
- }
- return len(buf), err
- }
- func (sw *streamWriter) format(buf []byte) []byte {
- msg := &jsonmessage.JSONMessage{Stream: sw.lineFormat(buf)}
- b, err := json.Marshal(msg)
- if err != nil {
- return FormatError(err)
- }
- return appendNewline(b)
- }
- // NewStdoutWriter returns a writer which formats the output as json message
- // representing stdout lines
- func NewStdoutWriter(out io.Writer) io.Writer {
- return &streamWriter{Writer: out, lineFormat: func(buf []byte) string {
- return string(buf)
- }}
- }
- // NewStderrWriter returns a writer which formats the output as json message
- // representing stderr lines
- func NewStderrWriter(out io.Writer) io.Writer {
- return &streamWriter{Writer: out, lineFormat: func(buf []byte) string {
- return "\033[91m" + string(buf) + "\033[0m"
- }}
- }
|