-
Notifications
You must be signed in to change notification settings - Fork 66
/
domains_api.go
78 lines (64 loc) · 3.31 KB
/
domains_api.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// Copyright 2019 The Cockroach Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
// implied. See the License for the specific language governing
// permissions and limitations under the License.
package errors
import "github.com/cockroachdb/errors/domains"
// Domain is the type of a domain annotation.
type Domain = domains.Domain
// NoDomain is the domain of errors that don't originate
// from a barrier.
const NoDomain Domain = domains.NoDomain
// NamedDomain returns an error domain identified by the given string.
func NamedDomain(domainName string) Domain { return domains.NamedDomain(domainName) }
// PackageDomain returns an error domain that represents the
// package of its caller.
func PackageDomain() Domain { return domains.PackageDomainAtDepth(1) }
// PackageDomainAtDepth returns an error domain that describes the
// package at the given call depth.
func PackageDomainAtDepth(depth int) Domain { return domains.PackageDomainAtDepth(depth) }
// WithDomain wraps an error so that it appears to come from the given domain.
//
// Domain is shown:
// - via `errors.GetSafeDetails()`.
// - when formatting with `%+v`.
// - in Sentry reports.
func WithDomain(err error, domain Domain) error { return domains.WithDomain(err, domain) }
// NotInDomain returns true if and only if the error's
// domain is not one of the specified domains.
func NotInDomain(err error, doms ...Domain) bool { return domains.NotInDomain(err, doms...) }
// EnsureNotInDomain checks whether the error is in the given domain(s).
// If it is, the given constructor if provided is called to construct
// an alternate error. If no error constructor is provided,
// a new barrier is constructed automatically using the first
// provided domain as new domain. The original error message
// is preserved.
func EnsureNotInDomain(err error, constructor DomainOverrideFn, forbiddenDomains ...Domain) error {
return domains.EnsureNotInDomain(err, constructor, forbiddenDomains...)
}
// DomainOverrideFn is the type of the callback function passed to EnsureNotInDomain().
type DomainOverrideFn = func(originalDomain Domain, err error) error
// HandledInDomain creates an error in the given domain and retains
// the details of the given original error as context for
// debugging. The original error is hidden and does not become a
// "cause" for the new error. The original's error _message_
// is preserved.
//
// See the documentation of `WithDomain()` and `errors.Handled()` for details.
func HandledInDomain(err error, domain Domain) error { return domains.HandledInDomain(err, domain) }
// HandledInDomainWithMessage is like HandledWithMessage but with a domain.
func HandledInDomainWithMessage(err error, domain Domain, msg string) error {
return domains.HandledInDomainWithMessage(err, domain, msg)
}
// GetDomain extracts the domain of the given error, or NoDomain if
// the error's cause does not have a domain annotation.
func GetDomain(err error) Domain { return domains.GetDomain(err) }