package exposed

import (
	"errors"
)

var (
	errTransport                  = errors.New("transport error")
	errOperation                  = errors.New("operation error")
	errHandlerNotFound            = errors.New("handler not found")
	errOperationAlreadyRegistered = errors.New("type already registered")
)

//Exposable interface autoregister services Operations
type Exposable interface {
	//ExposedOperations return a list of operations
	ExposedOperations() []OperationInfo
}

//Message represents an interchangeable payload
type Message = interface{}

type Handler interface {
	ServeExposed(ctx *Context, req Message, resp Message) (err error)
}

// The HandlerFunc type is an adapter to allow the use of
// ordinary functions as exposed RPC handlers.
type HandlerFunc func(ctx *Context, req Message, resp Message) (err error)

func (h HandlerFunc) ServeExposed(ctx *Context, req Message, resp Message) (err error) {
	return h(ctx, req, resp)
}