// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package browspr

import (
	"v.io/x/ref/services/wspr/internal/app"
	"v.io/x/ref/services/wspr/internal/lib"
)

// postMessageWriter is a lib.ClientWriter that handles sending messages over postMessage to the extension.
type postMessageWriter struct {
	messageId int32
	p         *pipe
}

func (w *postMessageWriter) Send(messageType lib.ResponseType, data interface{}) error {
	outMsg, err := app.ConstructOutgoingMessage(w.messageId, messageType, data)
	if err != nil {
		return err
	}

	w.p.browspr.postMessage(w.p.instanceId, "browsprMsg", outMsg)
	return nil
}

func (w *postMessageWriter) Error(err error) {
	w.Send(lib.ResponseError, app.FormatAsVerror(err))
}
