52 lines
1003 B
Go
52 lines
1003 B
Go
package utils
|
|
|
|
import (
|
|
"errors"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
)
|
|
|
|
var MissingTarget = errors.New("Missing write target")
|
|
|
|
func NewWriter(paths ...string) (io.Writer, error) {
|
|
if len(paths) == 0 {
|
|
return nil, MissingTarget
|
|
} else if len(paths) == 1 {
|
|
return stringToWriter(paths[0])
|
|
}
|
|
var writers []io.Writer
|
|
for _, path := range paths {
|
|
writer, err := stringToWriter(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
writers = append(writers, writer)
|
|
}
|
|
ioWriter := io.MultiWriter(writers...)
|
|
return ioWriter, nil
|
|
}
|
|
|
|
func MustWriter(paths ...string) io.Writer {
|
|
writer, err := NewWriter(paths...)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
return writer
|
|
}
|
|
|
|
var stringWriter = map[string]io.Writer{
|
|
"stdout": os.Stdout,
|
|
"stderr": os.Stderr,
|
|
"stdin": os.Stdin,
|
|
"discard": io.Discard,
|
|
}
|
|
|
|
func stringToWriter(path string) (io.Writer, error) {
|
|
if writer, ok := stringWriter[path]; ok {
|
|
return writer, nil
|
|
}
|
|
f, err := os.OpenFile(path, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)
|
|
return f, err
|
|
}
|