about summary refs log tree commit diff
path: root/pkg/lang/vm/output.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/lang/vm/output.go')
-rw-r--r--pkg/lang/vm/output.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/pkg/lang/vm/output.go b/pkg/lang/vm/output.go
new file mode 100644
index 0000000..1ef2357
--- /dev/null
+++ b/pkg/lang/vm/output.go
@@ -0,0 +1,45 @@
+package vm
+
+type Output interface {
+	Write(message string) error
+}
+
+type EmptyOutput struct{}
+
+func NewEmptyOutput() *EmptyOutput {
+	return &EmptyOutput{}
+}
+
+func (o *EmptyOutput) Write(message string) error {
+	return nil
+}
+
+type GatheringOutput struct {
+	messages []string
+}
+
+func NewGatheringOutput() *GatheringOutput {
+	return &GatheringOutput{
+		messages: make([]string, 0, 8),
+	}
+}
+
+func (o *GatheringOutput) Messages() []string {
+	return o.messages
+}
+
+func (o *GatheringOutput) Write(message string) error {
+	o.messages = append(o.messages, message)
+	return nil
+}
+
+type ConsoleOutput struct{}
+
+func NewConsoleOutput() *ConsoleOutput {
+	return &ConsoleOutput{}
+}
+
+func (o *ConsoleOutput) Write(message string) error {
+	println(message)
+	return nil
+}