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

import "v.io/v23/security"

// These messages are constructed so as to avoid embedding a component/method name
// and are thus more suitable for inclusion in other verrors.
// This practice of omitting {1}{2} should be used throughout the flow implementations
// since all of their errors are intended to be used as arguments to higher level errors.
// TODO(suharshs,toddw): Allow skipping of {1}{2} in vdl generated errors.
error (
  UnknownProtocol(protocol string) {"en":"unknown protocol{:protocol}"}
  ManagerClosed() {"en": "manager is already closed"}
  AcceptFailed(err error) {"en": "accept failed{:err}"}
  CacheClosed() {"en":"cache is closed"}
  ConnKilledToFreeResources() {"en": "Connection killed to free resources."}
  InvalidProxyResponse(typ string) {"en": "Invalid proxy response{:typ}"}
  ManagerDialingSelf() {"en": "manager cannot be used to dial itself"}
  ListeningWithNullRid() {"en": "manager cannot listen when created with NullRoutingID"}
  ProxyResponse(msg string) {"en": "proxy returned{:msg}"}
  NoBlessingsForPeer(peerNames []string, rejected []security.RejectedBlessing, err error) {"en": "no blessings tagged for peer {peerNames}, rejected:{rejected}{:err}"}
  ConnNotInCache(remote string)  {"en": "connection to {remote} not in cache"}
)
