// 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.

// This file was auto-generated by the vanadium vdl tool.
// Source: errors.vdl

package bidi

import (
	// VDL system imports
	"v.io/v23/context"
	"v.io/v23/i18n"
	"v.io/v23/verror"
)

var (
	ErrCannotListenOnBidi     = verror.Register("v.io/x/ref/runtime/protocols/bidi.CannotListenOnBidi", verror.NoRetry, "{1:}{2:} cannot listen on bidi protocol")
	ErrBidiRoutingIdNotCached = verror.Register("v.io/x/ref/runtime/protocols/bidi.BidiRoutingIdNotCached", verror.NoRetry, "{1:}{2:} bidi routing id not in cache")
)

func init() {
	i18n.Cat().SetWithBase(i18n.LangID("en"), i18n.MsgID(ErrCannotListenOnBidi.ID), "{1:}{2:} cannot listen on bidi protocol")
	i18n.Cat().SetWithBase(i18n.LangID("en"), i18n.MsgID(ErrBidiRoutingIdNotCached.ID), "{1:}{2:} bidi routing id not in cache")
}

// NewErrCannotListenOnBidi returns an error with the ErrCannotListenOnBidi ID.
func NewErrCannotListenOnBidi(ctx *context.T) error {
	return verror.New(ErrCannotListenOnBidi, ctx)
}

// NewErrBidiRoutingIdNotCached returns an error with the ErrBidiRoutingIdNotCached ID.
func NewErrBidiRoutingIdNotCached(ctx *context.T) error {
	return verror.New(ErrBidiRoutingIdNotCached, ctx)
}
