summary refs log tree commit diff
path: root/vendor/go.mau.fi/util/exerrors/dualerror.go
blob: 79acd06502745718e45e7e1cf78b8c4574511daa (plain)
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
// Copyright (c) 2022 Tulir Asokan
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

package exerrors

import (
	"errors"
	"fmt"
)

type DualError struct {
	High error
	Low  error
}

func NewDualError(high, low error) DualError {
	return DualError{high, low}
}

func (err DualError) Is(other error) bool {
	return errors.Is(other, err.High) || errors.Is(other, err.Low)
}

func (err DualError) Unwrap() error {
	return err.Low
}

func (err DualError) Error() string {
	return fmt.Sprintf("%v: %v", err.High, err.Low)
}