54 lines
1.1 KiB
Go
Raw Normal View History

package packer
import (
"fmt"
"io"
2013-05-21 11:40:07 -07:00
"log"
)
// The Ui interface handles all communication for Packer with the outside
// world. This sort of control allows us to strictly control how output
// is formatted and various levels of output.
type Ui interface {
Say(string)
Error(string)
}
2013-05-21 13:20:51 -07:00
// PrefixedUi is a UI that wraps another UI implementation and adds a
// prefix to all the messages going out.
type PrefixedUi struct {
Prefix string
Ui Ui
}
// The ReaderWriterUi is a UI that writes and reads from standard Go
// io.Reader and io.Writer.
type ReaderWriterUi struct {
Reader io.Reader
Writer io.Writer
}
func (u *PrefixedUi) Say(message string) {
u.Ui.Say(fmt.Sprintf("%s: %s", u.Prefix, message))
2013-05-21 13:20:51 -07:00
}
func (u *PrefixedUi) Error(message string) {
u.Ui.Error(fmt.Sprintf("%s: %s", u.Prefix, message))
2013-05-21 13:20:51 -07:00
}
func (rw *ReaderWriterUi) Say(message string) {
log.Printf("ui: %s", message)
_, err := fmt.Fprint(rw.Writer, message+"\n")
2013-05-08 17:09:10 -07:00
if err != nil {
panic(err)
}
}
2013-05-08 15:12:48 -07:00
func (rw *ReaderWriterUi) Error(message string) {
log.Printf("ui error: %s", message)
_, err := fmt.Fprint(rw.Writer, message+"\n")
2013-05-08 17:09:10 -07:00
if err != nil {
panic(err)
}
2013-05-08 15:12:48 -07:00
}