// 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/internal/flow/protocols/bidi.CannotListenOnBidi", verror.NoRetry, "{1:}{2:} cannot listen on bidi protocol")
	ErrBidiRoutingIdNotCached = verror.Register("v.io/x/ref/runtime/internal/flow/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)
}
