1// SPDX-License-Identifier: AGPL-3.0-or-later
2
3package domain
4
5import "errors"
6
7// Sentinel errors of the domain. Callers match them with errors.Is.
8var (
9 // ErrNotFound means the entity does not exist or is hidden from the caller.
10 ErrNotFound = errors.New("not found")
11 // ErrInvalidName means a repository name breaks the naming rules.
12 ErrInvalidName = errors.New("invalid repository name")
13 // ErrInvalidVisibility means a visibility value is neither public nor private.
14 ErrInvalidVisibility = errors.New("invalid visibility")
15 // ErrInvalidScope means a scope is not one of the known scopes.
16 ErrInvalidScope = errors.New("invalid scope")
17 // ErrInvalidToken means the settings of a token are not acceptable.
18 ErrInvalidToken = errors.New("invalid token")
19 // ErrAlreadyExists means the entity to create already exists.
20 ErrAlreadyExists = errors.New("already exists")
21 // ErrUnauthenticated means the operation needs credentials the caller lacks.
22 ErrUnauthenticated = errors.New("unauthenticated")
23 // ErrForbidden means the caller is known but may not do this.
24 ErrForbidden = errors.New("forbidden")
25 // ErrRejected means a push was refused by policy.
26 ErrRejected = errors.New("rejected")
27 // ErrConflict means a concurrent change prevented the operation.
28 ErrConflict = errors.New("conflict")
29 // ErrInvalid means an argument of a use case is not acceptable and no
30 // more specific error says why: an empty update, an unknown topic, a
31 // description that breaks the rules.
32 ErrInvalid = errors.New("invalid argument")
33 // ErrPreconditionFailed means the state of the forge does not allow the
34 // operation, for example a default branch that does not exist.
35 ErrPreconditionFailed = errors.New("failed precondition")
36 // ErrResourceExhausted means a limit of the server is reached, for example
37 // the number of event watchers; the caller may retry later.
38 ErrResourceExhausted = errors.New("resource exhausted")
39 // ErrUnavailable means something the operation depends on, outside the
40 // forge (github.com for an action), could not be reached; the caller may
41 // retry later.
42 ErrUnavailable = errors.New("unavailable")
43)
44
45// invalidErrors are the errors that mean a request was malformed.
46var invalidErrors = []error{
47 ErrInvalid, ErrInvalidName, ErrInvalidVisibility,
48 ErrInvalidScope, ErrInvalidToken,
49 ErrInvalidObjectID, ErrInvalidRevision, ErrInvalidPath,
50 ErrInvalidPageToken, ErrInvalidPageSize, ErrInvalidRefKind,
51 ErrNotDirectory, ErrNotFile, ErrInvalidText,
52}
53
54// IsInvalid reports whether err means that the request was malformed: an
55// invalid name, revision, path, page token, text, and the like. The adapters
56// answer all of them alike (invalid_argument on the API, the 404 page on the
57// web).
58func IsInvalid(err error) bool {
59 for _, invalid := range invalidErrors {
60 if errors.Is(err, invalid) {
61 return true
62 }
63 }
64 return false
65}