pulumi/pkg/engine/events.go
Matt Ellis 39dbdc98e9 Clean up colorization logic
The existing logic would flow colorization information into the
engine, so depending on the settings in the CLI, the engine may or may
not have emitted colorized events. This coupling is not great and we
want to start moving to a world where the presentation happens
exclusively at the CLI level.

With this change, the engine will always produce strings that have the
colorization formatting directives (i.e. the directives that
reconquest/loreley understands) and the CLI will apply
colorization (which could mean either running loreley to turn the
directives into ANSI escape codes, or drop them or retain them, for
debuging purposes).

Fixes #742
2018-01-31 15:46:14 -08:00

108 lines
2 KiB
Go

// Copyright 2017, Pulumi Corporation. All rights reserved.
package engine
import (
"fmt"
"github.com/pulumi/pulumi/pkg/diag"
"github.com/pulumi/pulumi/pkg/diag/colors"
)
// Event represents an event generated by the engine during an operation. The underlying
// type for the `Payload` field will differ depending on the value of the `Type` field
type Event struct {
Type EventType
Payload interface{}
}
// EventType is the kind of event being emitted.
type EventType string
const (
CancelEvent EventType = "cancel"
StdoutColorEvent EventType = "stdoutcolor"
DiagEvent EventType = "diag"
)
func cancelEvent() Event {
return Event{Type: CancelEvent}
}
// DiagEventPayload is the payload for an event with type `diag`
type DiagEventPayload struct {
Message string
Color colors.Colorization
Severity diag.Severity
}
type StdoutEventPayload struct {
Message string
Color colors.Colorization
}
func stdOutEventWithColor(s fmt.Stringer) Event {
return Event{
Type: StdoutColorEvent,
Payload: StdoutEventPayload{
Message: s.String(),
Color: colors.Raw,
},
}
}
func diagDebugEvent(msg string) Event {
return Event{
Type: DiagEvent,
Payload: DiagEventPayload{
Message: msg,
Color: colors.Raw,
Severity: diag.Debug,
},
}
}
func diagInfoEvent(msg string) Event {
return Event{
Type: DiagEvent,
Payload: DiagEventPayload{
Message: msg,
Color: colors.Raw,
Severity: diag.Info,
},
}
}
func diagInfoerrEvent(msg string) Event {
return Event{
Type: DiagEvent,
Payload: DiagEventPayload{
Message: msg,
Color: colors.Raw,
Severity: diag.Infoerr,
},
}
}
func diagErrorEvent(msg string) Event {
return Event{
Type: DiagEvent,
Payload: DiagEventPayload{
Message: msg,
Color: colors.Raw,
Severity: diag.Error,
},
}
}
func diagWarningEvent(msg string) Event {
return Event{
Type: DiagEvent,
Payload: DiagEventPayload{
Message: msg,
Color: colors.Raw,
Severity: diag.Warning,
},
}
}