@@ -137,14 +137,16 @@ const (
137
137
RawJSONMode DisplayMode = "rawjson"
138
138
)
139
139
140
- // NewDisplay constructs a Display that outputs to the given console.File with the given DisplayMode.
140
+ // NewDisplay constructs a Display that outputs to the given io.Writer with the given DisplayMode.
141
141
//
142
- // This method will return an error when the DisplayMode is invalid or if TtyMode is used but the console.File
142
+ // This method will return an error when the DisplayMode is invalid or if TtyMode is used but the io.Writer
143
143
// does not refer to a tty. AutoMode will choose TtyMode or PlainMode depending on if the output is a tty or not.
144
- func NewDisplay (out console.File , mode DisplayMode , opts ... DisplayOpt ) (Display , error ) {
144
+ //
145
+ // For TtyMode to work, the io.Writer should also implement console.File.
146
+ func NewDisplay (out io.Writer , mode DisplayMode , opts ... DisplayOpt ) (Display , error ) {
145
147
switch mode {
146
148
case AutoMode , TtyMode , DefaultMode :
147
- if c , err := console . ConsoleFromFile (out ); err == nil {
149
+ if c , err := consoleFromWriter (out ); err == nil {
148
150
return newConsoleDisplay (c , opts ... ), nil
149
151
} else if mode == "tty" {
150
152
return Display {}, errors .Wrap (err , "failed to get console" )
@@ -161,6 +163,15 @@ func NewDisplay(out console.File, mode DisplayMode, opts ...DisplayOpt) (Display
161
163
}
162
164
}
163
165
166
+ // consoleFromWriter retrieves a console.Console from an io.Writer.
167
+ func consoleFromWriter (out io.Writer ) (console.Console , error ) {
168
+ f , ok := out .(console.File )
169
+ if ! ok {
170
+ return nil , errors .New ("output is not a file" )
171
+ }
172
+ return console .ConsoleFromFile (f )
173
+ }
174
+
164
175
type discardDisplay struct {}
165
176
166
177
func newDiscardDisplay () Display {
0 commit comments