func StreamJSON()

in pkg/plan/stream.go [52:81]


func StreamJSON(channel <-chan TrackResponse, device io.Writer, pretty bool) error {
	var encoder = json.NewEncoder(device)
	if pretty {
		encoder.SetIndent("", "  ")
	}

	var lastStreamed = make(map[string]string)
	err := StreamFunc(channel, func(res TrackResponse) {
		if _, ok := lastStreamed[res.ID]; !ok {
			lastStreamed[res.ID] = ""
		}
		if res.Err != nil {
			res.Err = apierror.NewJSONError(res.Err)
			lastStreamed[res.ID] = res.Step
			_ = encoder.Encode(res)
		}

		if res.Step != lastStreamed[res.ID] {
			lastStreamed[res.ID] = res.Step
			_ = encoder.Encode(res)
		}
	})

	var merr *multierror.Prefixed
	if errors.As(err, &merr) {
		merr.SkipPrefixing = true
	}

	return multierror.WithFormat(err, "json")
}