1// Copyright 2023 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package raw 6 7import ( 8 "fmt" 9 "io" 10 11 "internal/trace/version" 12) 13 14// TextWriter emits the text format of a trace. 15type TextWriter struct { 16 w io.Writer 17 v version.Version 18} 19 20// NewTextWriter creates a new write for the trace text format. 21func NewTextWriter(w io.Writer, v version.Version) (*TextWriter, error) { 22 _, err := fmt.Fprintf(w, "Trace Go1.%d\n", v) 23 if err != nil { 24 return nil, err 25 } 26 return &TextWriter{w: w, v: v}, nil 27} 28 29// WriteEvent writes a single event to the stream. 30func (w *TextWriter) WriteEvent(e Event) error { 31 // Check version. 32 if e.Version != w.v { 33 return fmt.Errorf("mismatched version between writer (go 1.%d) and event (go 1.%d)", w.v, e.Version) 34 } 35 36 // Write event. 37 _, err := fmt.Fprintln(w.w, e.String()) 38 return err 39} 40