-
Notifications
You must be signed in to change notification settings - Fork 23
/
iostream.go
63 lines (49 loc) · 930 Bytes
/
iostream.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package iostream
import (
"bytes"
"io"
"os"
"github.com/aserto-dev/clui"
)
type IO interface {
Input() io.Reader
Output() io.Writer
Error() io.Writer
}
type StdIO struct {
In io.Reader
Out io.Writer
Err io.Writer
}
func (i *StdIO) Input() io.Reader {
return i.In
}
func (i *StdIO) Output() io.Writer {
return i.Out
}
func (i *StdIO) Error() io.Writer {
return i.Err
}
type BufferIO struct {
In *bytes.Buffer
Out *bytes.Buffer
Err *bytes.Buffer
}
func (i *BufferIO) Input() io.Reader {
return i.In
}
func (i *BufferIO) Output() io.Writer {
return i.Out
}
func (i *BufferIO) Error() io.Writer {
return i.Err
}
func DefaultIO() *StdIO {
return &StdIO{os.Stdin, os.Stdout, os.Stderr}
}
func BytesIO() *BufferIO {
return &BufferIO{&bytes.Buffer{}, &bytes.Buffer{}, &bytes.Buffer{}}
}
func NewUI(ios IO) *clui.UI {
return clui.NewUIWithOutputErrorAndInput(ios.Output(), ios.Error(), ios.Input())
}