1// Copyright 2011 Google Inc. All rights reserved.
2// Use of this source code is governed by the Apache 2.0
3// license that can be found in the LICENSE file.
4
5// This file provides error functions for common API failure modes.
6
7package appengine
8
9import (
10	"fmt"
11
12	"google.golang.org/appengine/internal"
13)
14
15// IsOverQuota reports whether err represents an API call failure
16// due to insufficient available quota.
17func IsOverQuota(err error) bool {
18	callErr, ok := err.(*internal.CallError)
19	return ok && callErr.Code == 4
20}
21
22// MultiError is returned by batch operations when there are errors with
23// particular elements. Errors will be in a one-to-one correspondence with
24// the input elements; successful elements will have a nil entry.
25type MultiError []error
26
27func (m MultiError) Error() string {
28	s, n := "", 0
29	for _, e := range m {
30		if e != nil {
31			if n == 0 {
32				s = e.Error()
33			}
34			n++
35		}
36	}
37	switch n {
38	case 0:
39		return "(0 errors)"
40	case 1:
41		return s
42	case 2:
43		return s + " (and 1 other error)"
44	}
45	return fmt.Sprintf("%s (and %d other errors)", s, n-1)
46}
47