tkcashgame_v4/pkg/utils/writer.go

52 lines
1003 B
Go
Raw Permalink Normal View History

2025-10-22 10:01:11 +00:00
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
}